第三章 用户界面
界面元素:
视图组件:TextView Button EditText Checkbox Spinner ListView
视图容器
布局管理:线性、相对、绝对、网格、表格、框架
事件处理机制:
事件(Event)
事件源(Event Source)
事件监听器(Event Listener)
Android提供了两种创建布局的方式:XML布局文件和代码直接实现
实现事件处理步骤:
创建事件监听器
在事件处理方法编写事件处理代码
在相应组件注册事件监听器
匿名方式事件处理代码
public class MainActivity extends AppCompatActivity {
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
Button btnYellow=(Button)this.findViewById(R.id.btnYellow);
Button btnBlue=(Button)this.findViewById(R.id.btnBlue);
btnYellow.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
getWindow().setBackgroundDrawableResource(R.color.yellow);
}
});
btnBlue.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
getWindow().setBackgroundDrawableResource(R.color.blue);
}
});
对应布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btnYellow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="黄色"/>
<Button
android:id="@+id/btnBlue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蓝色"/>
</LinearLayout>
创建Toast方法(没有焦点,显示时间有限)
调用Toast的静态方法makeText()创建一个指定文本和时长的提示信息
调用Toast的show()方法显示提示信息
Toast t1 = Toast.makeText(getApplicationContext(),"多显示一会",Toast.LENGTH_LONG);
t1.show();
对话框
AlertDialog提示对话框
ProgressDialog 进度对话框
DatePickerDialog日期选择对话框
TimePickerDialog时间选择对话框
创建提示对话框的步骤
获得AlterDialog的静态内部类的Builder对象,由该类创建对话框
通过Builder对象设置对话框的标题、按钮、以及按钮将要响应的事件
调用Builder的Create()方法创建对话框
调用Builder的show()方法显示对话框
对应代码
public class MainActivity extends AppCompatActivity {
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
final TextView mytv=(TextView)findViewById(R.id.tv);
Button btnDelete=(Button)findViewById(R.id.delete);
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
builder.setMessage("真的要删除吗?").setPositiveButton("是",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
mytv.setText("删除成功!");}
}).setNegativeButton("否",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
mytv.setText("取消删除");
}
});
AlertDialog ad =builder.create();
ad.show();
}
});
}
}
对应布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"/>
</LinearLayout>
菜单
创建菜单选项:
覆盖activity的onCreateOptionsMenu()方法
调用Menu的add方法添加菜单选项(MenuItem)
当菜单选项被选择时,覆盖activity的onOptionsItemSelected()方法来响应事件
创建上下文菜单
重写activity的onCreateContextMenu()方法,调用menu的add方法添加菜单选项(MenuItem)
重写onCreateItemSelected()方法,响应菜单点击事件
在activity的onCreate()方法中,调用registerForContextMenu()方法,为视图注册上下文菜单
常用的widget组件:按钮、文本框、编辑框、复选框、单选按钮组、下拉列表
ActionBar的主要元素:图标和标题部分、ActionButton、OverFlow、ActionView、Tabs