2.3 相关知识
相关知识
对话框
创建AlertDialog的步骤:
1) 创建AlertDialog.Builder对象;
2) 调用Builder对象的setTitle方法设置标题,setIcon方法设置图标;
3) 调用Builder相关方法如setMessage方法、setItems方法、setSingleChoiceItems方法、setMultiChoiceItems方法、setAdapter方法、setView方法设置不同类型的对话框内容;
4) 调用setPositiveButton、setNegativeButton、setNeutralButton设置多个按钮;
5) 调用Builder对象的create()方法创建AlertDialog对象;
6) 调用AlertDialog对象的show()方法将对话框显示出来。
事件
Android中的事件处理响通常用于响应用户UI动作,提高应用程序交互性。例如单击按钮,触摸某个对象等。
监听事件处理模型
生活中发生的事件很多,如小朋友摔倒,家长看到立即将他抱起来。在Android中,我们将完整的事件分成3个主要参与对象:事件源、事件和事件监听者。
事件源(Event Source):事件发生的来源。如按钮、菜单等UI控件。前面的小朋友也是事件源。
事件(Event):事件源上发生的特定的动作。如按钮上发生的单击动作。如小朋友摔倒的这个动作就是一个摔倒事件。
事件监听器(Event Listener):监听事件源发生的事件,并对被监听的事件做出相应的处理。如为某个按钮设置一个单击监听器,当该按钮发生单击事件的时候,弹出一个对话框。上面例子中,家长就是一个事件监听器,时刻监听(观察)小朋友是否发生了摔倒事件,当发生之后,立即响应处理——将小朋友抱起来。
所以Android中事件处理的完整过程就是为事件源设置一个对应事件的事件监听器,在监听器中编写响应方法。
监听事件响应处理方法
1) 通过UI布局文件,设定UI的android:onClick的属性(事件处理方法)
注意:代码里面有个跟android:onClick设置的同名方法,且该方法必须是public void的,同时有一个View类型的参数,该参数表示事件源对象。
案例如下:
表2-3-4 Ex2_3_1 布局文件activity_main.xml清单
<?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"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="事件测试按钮"
android:onClick="btnClick" />
</LinearLayout>
表2-3-5 Ex2_3_1 MainActivity.java清单
package com.example.ex2_3_1;
….
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnClick(View view) {
Toast.makeText(this,((Button)view).getText()
+"被单击",Toast.LENGTH_SHORT).show();
}
}
2) 通过匿名类响应事件
布局文件省略。
表2-3-6 Ex2_3_2 MainActivity.java清单
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,
"发生了单击事件",Toast.LENGTH_SHORT).show();
}
});
}
}
3) 通过内部类响应事件
布局文件省略。
表2-3-7 Ex2_3_3 MainActivity.java清单
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button)findViewById(R.id.button);
btn.setOnClickListener( new MyListener());
}
private class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"发生了单击事件",Toast.LENGTH_SHORT).show();
}
}
}
4) 通过外部类相应事件
布局文件省略。
表2-3-8 Ex2_3_4 MainActivity.java清单
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button)findViewById(R.id.button);
btn.setOnClickListener( new OutListener(this));
}
}
表2-3-9 Ex2_3_4 OutListener.java清单
class OutListener implements View.OnClickListener {
private Context context;
/**
* 为了让Toast能正常运行,必须引入上下
* 文环境——MainActivity。引入外部参数,
* 最通用的办法就是通过构造方法来实现。
* @param context
*/
public OutListener(Context context){
this.context=context;
}
@Override
public void onClick(View v) {
Toast.makeText(context,"发生了单击事件",Toast.LENGTH_SHORT).show();
}
}
5) 通过Activity自身类响应事件
布局文件省略。
表2-3-10 Ex2_3_5 MainActivity.java清单
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn =(Button)findViewById(R.id.button);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(this,"发生了单击事件",Toast.LENGTH_SHORT).show();
}
}
学员评价