Android 自定义弹出对话框实例

    在编写代码过程中,对于弹出框,事先写好的布局文件往往不能满足我们的需求,这时我们需要自己定义样式。

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()方法来获得其中的界面元素。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。