1、确定取消对话框
具体的步骤:
a,创建对话框构建器对象,类似工厂模式
AlertDialog.Builder builder = new Builder(this);//this是一个上下文Context ,查看源码可知
b,设置标题和正文
builder.setTitle("警告");
builder.setMessage("对话框内容");
c,设置确定和取消按钮
builder.setPositiveButton("确定", new OnClickListener() {//注意这个侦听是dialog包下的,不要导错了
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "已经确定", 0).show();
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "已经取消", 0).show();
}
});
d,使用构建器创建出对话框对象
AlertDialog ad = builder.create();
ad.show();
代码演示:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click1(View v){
//创建对话框创建器
AlertDialog.Builder builder = new Builder(this);
//设置图标
builder.setIcon(android.R.drawable.ic_dialog_alert);
//设置标题
builder.setTitle("警告");
//设置内容
builder.setMessage("对话框内容");
//设置确定按钮
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "已经确定", 0).show();
}
});
//设置取消按钮
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "已经取消", 0).show();
}
});
//显示对话框
AlertDialog ad = builder.create();
ad.show();
}
}
这样就OK了
2、单选对话框
public void click2(View v){
//创建对话框创建器
AlertDialog.Builder builder = new Builder(this);
//设置图标
builder.setIcon(android.R.drawable.ic_dialog_alert);
//设置标题
builder.setTitle(“选择职业”);
final String[] items = new String[]{
"老师",
"程序员",
"客服",
};
//设置单选选项
builder.setSingleChoiceItems(items, 1, new OnClickListener() {
//dialog:触发此方法执行的那个对话框
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, items[which], 0).show();
//对话框消失
dialog.dismiss();
}
});
//显示对话框
builder.show();
}
注意:不要设置 builder.setMessage("对话框内容"); 不然会覆盖
3、多选对话框
void click3(View v){
//创建对话框创建器
AlertDialog.Builder builder = new Builder(this);
//设置图标
builder.setIcon(android.R.drawable.ic_dialog_alert);
//设置标题
builder.setTitle(“选择职业”);
final String[] items = new String[]{
"老师",
"程序员",
"客服",
};
final boolean[] checkedItems = new boolean[]{
true,
false,
true
};
//设置多选选项
builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
//记录用户的选择
checkedItems[which] = isChecked;
}
});
builder.setPositiveButton("确定", new OnClickListener() {//点击确定对话框就会消失,不用去dialog.dismiss();
@Override
public void onClick(DialogInterface dialog, int which) {
String text = "";
for (int i = 0; i < checkedItems.length; i++) {
text += checkedItems[i]? items[i] + ",": "";//三步运算符
}
Toast.makeText(MainActivity.this, text, 0).show();
}
});
builder.show();
}
4、进度条对话框
public void click4(View v){
//创建进度条对话框
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setIcon(android.R.drawable.ic_input_add);
dialog.setTitle(“正处理,请稍候…”);
dialog.setMax(100);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
Thread t = new Thread(){
public void run() {
for (int i = 0; i <= 100; i++) {
dialog.setProgress(i);
try {
sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//完成,进度消失
dialog.dismiss();
}
};
t.start();//开启一个子线程
dialog.show();//显示dialog
}
5、样式与主题
为什么设置样式,因为如果多个地方使用同一个设置的话,如果修改那么都需要修改,如果定义了样式的话,那么就只需要修改一个地方。
在style.xml文件中定义
<style name="basestyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">30sp</item>
<item name="android:textColor">#00ff00</item>
</style>
样式还可以继承,比如我只想改变basestyle中的某一个属性,我就可以继承它,2种写法:
a,使用parent
<style name="style1" parent="basestyle">
<item name="android:textSize">20sp</item>
</style>
b,使用. 这种写法会多一点
<style name="basestyle.style2">
<item name="android:textColor">#ff0000</item>
</style>
使用的话我们直接去引用就行了,例如:
这个只需要设置文本的内容就行了
<TextView
android:text="@string/hello_world"
style="@style/basestyle"
/>
<TextView
android:text="@string/hello_world"
style="@style/style1"
/>
<TextView
android:text="@string/hello_world"
style="@style/style2"
/>
主题的设置和样式一模一样,主题用于Activity
6、国际化
就比如想应用中的字体随着系统语言的设置而改变,就需要设置国际化
如果我们在xml知直接定义的话,会提示一个IN18警告,因为国际化需要在string.xml中定义
具体的步骤:
在res文件夹中复制value,将里面的string.xml定义多份
value-zh 里面放中文
value-en 里面放英文
…
这样你的应用中的语言就会随着系统语言的改变而改变
定义图片的时候,android:src设置图片的路径
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/flag"
android:layout_centerInParent="true"
/>