在编写代码过程中,对于弹出框,事先写好的布局文件往往不能满足我们的需求,这时我们需要自己定义样式。
1、首先新建一个xml文件,这里以设置音效开关为例
myview.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/toggleButton1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/voice"
android:textSize="20sp" />
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/textView1"
android:text="ToggleButton"
android:textOff="OFF"
android:textOn="ON" />
</RelativeLayout>
2、在代码中调用自定义视图
public void setSound(){
// 取得自定义View
LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.instance); //MainActivity.instance是在MainActivity.java中定义的,public static MainActivity instance;
View myLoginView = layoutInflater.inflate(R.layout.myview, null);
myToggleButton = (ToggleButton)myLoginView.findViewById(R.id.toggleButton1);
if(audio_on){
myToggleButton.setChecked(true);
}else{
myToggleButton.setChecked(false);
}
Dialog alertDialog = new AlertDialog.Builder(MainActivity.instance)
.setTitle("设置")
.setView(myLoginView)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if(myToggleButton.isChecked()){
audio_on = true;
}else{
audio_on = false;
}
}
}).
create();
alertDialog.show();
}
这是游戏的菜单界面:
点击设置后弹出设置音效开关对话框,调用setSound()方法:
3、相关知识点补充
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
原文地址:http://wty530.blog.51cto.com/3238860/1631877