控件是界面组成的主要元素,为了显示界面上的输入框、图片、文字等信息,Android系统提供了一些控件来显示这些信息,每个控件都有对应的属性来设置不同的效果。我们以控件使用的复杂程度将Android中的控件分别简单控件和列表控件,简单控件包含以下几种,具体如下图所示。
1.TextView控件
TextView控件用于显示文本信息,我们可以在XML布局文件中以添加属性的方式来控制TextView控件的样式, TextView控件的属性如下表所示。

2.EditText控件
EditText表示编辑框,它是TextView的子类,用户可在此控件中输入信息。除了支持TextView控件的属性外,EditText还支持一些其它的常用属性,这些常用属性如下表所示。
3.Button控件
Button控件表示按钮,它继承TextView控件,既可以显示文本,又可以显示图片,同时也允许用户通过点击来执行操作,当Button控件被点击时,被按下与弹起的背景会有一个动态的切换效果,这个效果就是点击效果 。
Button控件设置点击事件的方式有三种,具体如下所示。
首先设置好按钮:
<?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" > <Button android:id="@+id/bt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮1" android:layout_marginTop="20dp" android:onClick="click"/> <Button android:id="@+id/bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮2" android:layout_marginTop="20dp"/> <Button android:id="@+id/bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="按钮3" android:layout_marginTop="20dp"/> </LinearLayout>
(1)在布局文件中指定onClick属性的方式设置点击事件
package com.example.chapterthreebutton; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1=findViewById(R.id.bt1); } public void click(View v){ button1.setText("按钮1被点击"); } }
button1=findViewById(R.id.bt1);
给一个Button类型的变量赋值,赋的值为通过findViewById函数返回的值。这里的R.id.bt1表示你在Android界面菜单内拖出来的一个新的按钮,编译器会自动给这个按钮一个编号。findViewById函数就是通过这个编号准确定位这个按钮,执行你想要对它进行的操作。
(2)使用匿名内部类的方式设置点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//实现点击事件的代码
}
});
package com.example.chapterthreebutton; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { //Button button1; Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //button1=findViewById(R.id.bt1); button2=findViewById(R.id.bt2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { button2.setText("按钮2已被点击"); } }); } // public void click(View v){ // button1.setText("按钮1被点击"); // } }
btn.setOnClickListener(this);,代表我们要给这个按钮设置一个监听器。什么是监听器呢?监听器就是负责监控按钮运行的工具。这个OnClickListener就是负责监听用户是否按下这个按钮的。
(3)Activity实现OnClickListener接口的方式设置点击事件
public class Activity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
......
btn.setOnClickListener(this); //设置Button控件的点击监听事件
}
@Override
public void onClick(View view) {
//实现点击事件的代码
}
}
或者
有些需要注意的到
button3.setOnClickListener(this);this会报错,解决办法
选择下面的
package com.example.chapterthreebutton; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { //Button button1; // Button button2; Button button3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //button1=findViewById(R.id.bt1); // button2=findViewById(R.id.bt2); // button2.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // button2.setText("按钮2已被点击"); // } // }); button3=findViewById(R.id.bt3); button3.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.bt3: button3.setText("按钮3被点击"); break; } } // public void click(View v){ // button1.setText("按钮1被点击"); // } }
注意:实现Button控件的点击事件的三种方式中,前两种方式适合界面上Button控件较少的情况,如果界面上Button控件较多时,建议使用第三种方式实现控件的点击事件。
4. ImageView控件
ImageView控件表示图片,它继承自View,可以加载各种图片资源。ImageView控件的常用属性如下表所示。
在设置前景图片时:src 锁定纵横比不会失帧
5 .RadioButton控件
RadioButton表示单选按钮,它是Button的子类。每一个单选按钮都有“选中”和“未选中”两种状态,这两种状态是通过android:checked属性指定的。当可选值为true时,表示选中状态,否则,表示未选中状态。
<?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" > <RadioGroup android:id="@+id/rg" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RadioButton android:id="@+id/rb1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="男" android:textSize="28dp"/> <RadioButton android:id="@+id/rb2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" android:textSize="28dp"/> </RadioGroup> <TextView android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30dp"/> </LinearLayout>
package com.example.chapterthreeradiobutton; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView textView; RadioGroup radioGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); radioGroup=findViewById(R.id.rg); textView=findViewById(R.id.myview); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId==R.id.rb1){ textView.setText("你的性别是:男"); }else { textView.setText("你的性别是:女"); } } }); } }
6 .CheckBox控件
CheckBox表示复选框,它是Button的子类,用于实现多选功能。每一个复选框都有“选中”和“未选中”两种状态,这两种状态是通过android:checked属性指定的,当该属性的值为true时,表示选中状态,否则,表示未选中状态。
<?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:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请选择兴趣爱好:" android:textColor="#FF8000" android:textSize="28dp"/> <CheckBox android:id="@+id/cb1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="羽毛球" android:textSize="28dp" /> <CheckBox android:id="@+id/cb2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="篮球" android:textSize="28dp" /> <CheckBox android:id="@+id/cb3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="乒乓球" android:textSize="28dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="你选择的兴趣爱好为:" android:textSize="28dp" android:textColor="#FF8000"/> <TextView android:id="@+id/hobby" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="28dp" android:textColor="#FF8000"/> </LinearLayout>
package com.example.chapterthreecheckbox;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
TextView hobby;
String hobbys;
CheckBox shuttlecock,basketball,pingpon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
shuttlecock=findViewById(R.id.cb1);
basketball=findViewById(R.id.cb2);
pingpon=findViewById(R.id.cb3);
shuttlecock.setOnCheckedChangeListener(this);
basketball.setOnCheckedChangeListener(this);
pingpon.setOnCheckedChangeListener(this);
hobby=findViewById(R.id.hobby);
hobbys=new String();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String motion=buttonView.getText().toString();
if(isChecked){
if(!hobbys.contains(motion)){
hobbys=hobbys+motion;
hobby.setText(hobbys);
}else {
if(hobbys.contains(motion)){
hobbys=hobbys.replace(motion,"");
hobby.setText(hobbys);
}
}
}
}
}
7 .Toast类
Toast是Android系统提供的轻量级信息提醒机制,用于向用户提示即时消息,它显示在应用程序界面的最上层,显示一段时间后自动消失不会打断当前操作,也不获得焦点。
使用Toast显示提示信息的示例代码如下:
Toast.makeText(Context,Text,Time).show();
关于makeText()方法中参数的相关介绍具体如下:
Context:表示应用程序环境的信息,即当前组件的上下文环境。
Text:表示提示的字符串信息。
Time:表示显示信息的时长,其属性值包括Toast.LENGTH_SHORT和Toast.LENGTH_LONG,分别表示显示较短时间和较长时间。
<?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:gravity="center"
>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮"
android:background="#fa0000"/>
</LinearLayout>
package com.example.chapterthreettoast;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId()==R.id.btn)
Toast.makeText(MainActivity.this,"按钮被点击",Toast.LENGTH_LONG).show();
}
}