1、按钮(Button)与图片视图(ImageView)
Button继承自TextView。Button本身还有几个子孙类,包括CheckBox、RadioButton(单选框)、Switch(开关)和ToggleButton等。使用Button的时候,首先在XML文件中定义,指定其上显示的文本信息,即按钮名称,然后在代码中定义它所完成的事件,这样用户在点击它的时候就会自动运行点击事件的代码段。
2、Button的两种事件处理方式
(1)现在配置文件中第一两个Button:
<Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/tv" android:layout_alignTop="@id/tv" android:onClick="showText" android:text="确认" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/btn1" android:layout_alignTop="@id/tv" android:text="Button2" />
定义两个Button分别为btn1和btn2,btn1调用的是MainActivity类里面的函数:
public void showText(View v) { Button btn=(Button)v; String string=btn.getText().toString(); tv.setText(string); }
效果为显示button上面的文字:
对bttton2的设置是通过一个匿名内部类完成的:
btn2.setOnClickListener(new OnClickListener(){ public void onClick(View v) { tv.setText(""); Toast.makeText(getApplicationContext(), "Button 2", 2000).show(); } });
点击按钮显示提示信息:
3、ImageView和ImageButton
ImageView控件可以显示图片,ImageButton控件继承与ImageView,是一个图片按钮。
4、imageView
(1)导入照片:
(2)书写配置文件:
图片:
<ImageView android:id="@+id/image" android:layout_width="290dp" android:layout_height="290dp" android:src="@drawable/i1"/>
按钮:
<Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="88dp" android:layout_marginLeft="328dp" android:text="@string/change1" android:onClick="changeAheadImage" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="128dp" android:layout_marginLeft="328dp" android:text="@string/change2" android:onClick="changeNextImage" />
(3)书写代码,实现按钮切换图片的功能:
public class MainActivity extends Activity { private ImageView image=null; private Button btn1=null; private Button btn2=null; private int ids[]= { R.drawable.i1, R.drawable.i2, R.drawable.i3, R.drawable.i4, R.drawable.i5, }; int count=0; int alpha=100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews() { image=(ImageView)findViewById(R.id.image); btn1=(Button)findViewById(R.id.btn1); btn2=(Button)findViewById(R.id.btn2); } public void changeAheadImage(View v) { image.setImageResource(ids[count-- % ids.length]); } public void changeNextImage(View v) { image.setImageResource(ids[count++ % ids.length]); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
5、imageButton
(1)导入图片后书写配置文件:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <!--被点击的话--> <item android:state_pressed="true" android:drawable="@drawable/hook"></item> <!--上面的不符合条件的话--> <item android:drawable="@drawable/cross"></item> </selector>
(2)对文本和ImageButton进行配置:
<TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <ImageView android:id="@+id/imageBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/image_selector" android:onClick="press" />
(3)书写java代码,对ImageButton进行初始化、书写onClick被调用的函数:
public class MainActivity extends Activity { private TextView text=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text=(TextView)findViewById(R.id.text); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void press(View v) { text.setText("中国加油,武汉加油!!"); } }
总结:
1、Alt+Shift+M 把一段函数内的代码抽取成方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
处理前:
private void initViews() { tv=(TextView)findViewById(R.id.tv); btn1=(Button)findViewById(R.id.btn1); btn2=(Button)findViewById(R.id.btn2); }
处理后:
private void initViews() { init(); }//btn1的事件处理 private void init() { tv=(TextView)findViewById(R.id.tv); btn1=(Button)findViewById(R.id.btn1); btn2=(Button)findViewById(R.id.btn2); }