7.1 按钮
按钮的作用是接收用户单击事件,并执行操作的控件。按钮可以在一般的表单中使用。Android按钮有Button、ImageButton和ToggleButton三种主要形式。
7.1.1 Button
Button是能够显示文本的普通按钮,默认样式为直角设计,如图7-2所示。
图7-2 Button样式
它的对应类是android.widget.Button,类图如图7-3所示,从图中可见android. widget.Button继承了android.widget.TextView, TextView是显示文本的控件,这说明Button是一种显示文本按钮。android:text属性可以设置Button按钮上显示的文本。
图7-3 Button类图
7.1.2 ImageButton
ImageButton是一种带有图片的按钮,它默认样式也为直角设计,但是显示的不是文本而是图片。
ImageButton对应类是android.widget.ImageButton,类图如图7-4所示,从图中可见android.widget.ImageButton继承了android.widget.ImageView, ImageView是显示图片的控件,这说明ImageButton是一种显示图片按钮。android:src属性可以设置ImageButton按钮上显示的图片。
图7-4 ImageButton类图
7.1.3 ToggleButton
ToggleButton是一种可以显示两种状态的按钮,类似于Switch。ToggleButton上的文本默认情况下显示OFF或ON,如图7-5所示,这些文本是由系统提供的,会根据设备设置的语言习惯而实现本地化,因此在手机设置为中文语言习惯时,那么看到ToggleButton上显示的文本是“关闭”或“开启”。当然可以自定义两种状态的显示文本,可以通过android:textOn和android:textOff属性设置文本。
图7-5 ToggleButton样式
ToggleButton对应类是android.widget.ToggleButton,类图如图7-6所示,从图中可见android.widget.ToggleButton继承了android.widget.Button。
图7-6 ToggleButton类图
7.1.4 实例:ButtonSample
下面通过一个实例介绍Button、ImageButton和ToggleButton三种按钮。如图7-7所示,屏幕中分别有Button、ImageButton和ToggleButton三个按钮。但单击某个按钮,屏幕最上边的标签显示的内容会被修改。
图7-7 ButtonSample实例运行效果
布局文件activity_main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView //用来显示按钮单击后的状态 android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button //声明Button按钮 android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button"/> <ImageButton //声明ImageButton按钮 android:id="@+id/imageButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> ① <ToggleButton//声明ToggleButton按钮 android:id="@+id/toggleButton" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
上述布局采用垂直的线性布局,其中包含4个控件,一个标签(TextView)和三个按钮。ImageButton按钮代码第①行android:src="@mipmap/ic_launcher"是为按钮设置显示的图片,android:src属性是图片来源,"@mipmap/ic_launcher"是放置在res/mipmap目录中的ic_launcher.png图标。
MainActivity.java代码如下:
public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView text =(TextView) findViewById(R.id.textView); Button button=(Button) findViewById(R.id.button); ① button.setOnClickListener(new View.OnClickListener(){ ② @Override public void onClick(View v){ text.setText("单击了Button! "); } }); ③ ImageButton imageButton=(ImageButton) findViewById(R.id.imageButton); imageButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ text.setText("单击了ImageButton! "); } }); final ToggleButton toggleButton=(ToggleButton) findViewById(R.id.toggleButton); toggleButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ text.setText("单击了ToggleButton,状态:" + String.valueOf(toggleButton.isChecked())); ④ } }); } }
上述代码第①行是通过findViewById(R.id.button)方法是查找Button对象,它是通过布局文件中声明的控件id查找的,获得Button对象之后,再定义它的事件处理。代码第②行~第③行是事件处理代码,采用匿名内部类实现。关于事件处理读者可以参考第5章。另外两个按钮事件处理与Button类似,这里就不再赘述。
在代码第④行中的toggleButton.isChecked()方法是获得ToggleButton的状态,返回布尔值,即true或false。