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。