在4.2后就不推荐使用showDialog了,而是推荐使用DialogFragment;
关于DialogFragment 谷歌是这样描述的:
you may implement onCreateDialog(Bundle) to create your own custom Dialog object.
你可以自己通过onCreateDialog(Bundle)来创建一个自定义的Dialog
下面是自己实现的一个Dialog:
首先是效果图
布局文件dialog_signin.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" xmlns:android1="http://schemas.android.com/apk/res/android">
<ImageView
android:src="@drawable/ic_launcher"
android:layout_width="match_parent"
android:layout_height="64dp"
android:scaleType="center"
android:background="#FFFFBB33"
android:contentDescription="@string/app_name" />
<EditText
android:id="@+id/username"
android:inputType="textEmailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"
android:hint="user" />
<EditText
android:id="@+id/password"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="16dp"
android:fontFamily="sans-serif"
android:hint="password"/>
<CheckBox
android1:id="@+id/checkBox1"
android1:layout_width="wrap_content"
android1:layout_height="wrap_content"
android1:text="CheckBox" />
</LinearLayout>
这里本来想添加一个SeekBar进去 结果发现不行.不知道什么原因.有明白的大神可以告诉一下~
自定义的Dialog类 CustomDialog.java
package com.example.customdialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
public class CustomDialog extends DialogFragment implements
OnCheckedChangeListener {
private CheckBox box;
private int arg;
//通过newInstance()创建实例,通过缺省构造函数创建对象,将传递的信息作为Fragment的参数,返回对象
public static CustomDialog newInstance(String title) {
CustomDialog frag = new CustomDialog();
Bundle args = new Bundle();
args.putString("title", title);
frag.setArguments(args);
return frag;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("title");
//生成inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// 通过inflate将自定义的Dialog布局找到
View view = inflater.inflate(R.layout.dialog_signin, null);
//注意Dialog布局里的组件不能用getActivity().findViewBtId(xxx),否则会报错
//如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组件.
box = (CheckBox)view.findViewById(R.id.checkBox1);
box.setOnCheckedChangeListener(this);
return new AlertDialog.Builder(getActivity())
.setView(view)
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((MainActivity) getActivity()).doPositiveClick();
}
})
.setNegativeButton("cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
((MainActivity) getActivity())
.doNegativeClick();
}
}).create();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
int key = buttonView.getId();
switch (key) {
case R.id.checkBox1:
if (isChecked) {
Toast.makeText(getActivity(), "check true", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getActivity(), "check false", Toast.LENGTH_SHORT)
.show();
}
break;
default:
break;
}
}
}
package com.example.customdialog;
import android.os.Bundle;
import android.app.Activity;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
}
void showDialog() {
DialogFragment customDialog = CustomDialog.newInstance("demo");
customDialog.show(fragmentManager, "dialog");
}
public void doPositiveClick() {
// Do stuff here.
Log.i("Dialog", "Positive click!");
}
public void doNegativeClick() {
// Do stuff here.
Log.i("Dialog", "Negative click!");
}
}