2015-04-02 18:27:02
有的时候安卓内置的对话框不能满足我们的需要,或许是功能不齐全亦或者不符合我们的界面设计要求,这个时候我们就需要弄一个我们自己设置的对话框了,下面我将为大家讲一种很简单的方法创建自己的对话框。
首先创建一个style 即:<style name="你自己命名" parent="@android:Theme.Dialog">.......</style>这个相信大家都懂的。
接着创建你自己的对话框布局:自己要怎样的自己设计
创建一个自己的Dialog类继承Dialog,即:
public Mydialog extends Dialog{
这个类里要包含这个构造方法
public Mydialog(Context context, int theme) {
super(context, theme);
this.context = context;
}
接着创建这个方法,其实跟Activity差不多的
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.你创建的dialog布局);
}
}
上面要注意的是:如果你对话框有要处理的事件,比如退出对话框或者其他点击按钮的最好实现OnClickListener接口
接着就是在Activity中使用你自己的Dialog了
Dialog dialog = new Mydialog(ApplicationCarActivity.this,
R.style.MyDialog);注意R.style.MyDialog这个就是开始你创建的那个style
下面我把我做的过程的代码放在下面:
首先创建的style:
<style name="MyDialog" parent="@android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/ic_launcher</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
里面的内容我就不解释了
接着是我的对话框布局:布局随便搞的,大家看着就好
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <DatePicker android:id="@+id/date_picker1" android:calendarViewShown="false" android:layout_width="wrap_content" android:layout_height="150dp" style="@style/AppTheme"/> <TimePicker android:id="@+id/time_picker1" android:layout_width="wrap_content" android:layout_height="150dp"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <Button android:id="@+id/butn_sure" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffffff" android:text=" "/> <Button android:id="@+id/butn_no" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消"/> </LinearLayout> </LinearLayout>
这个是自定义的Dialog
class Mydialog extends Dialog implements android.view.View.OnClickListener { private Context context; private Button butn; private TimePicker timePicker; private DatePicker datePicker; // public Mydialog(Context context) { // super(context); // // // TODO Auto-generated constructor stub // } public Mydialog(Context context, int theme) { super(context, theme); this.context = context; // TODO Auto-generated constructor stub } protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // setTheme(android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen); this.setContentView(R.layout.dialog_test); datePicker = (DatePicker) findViewById(R.id.date_picker1); timePicker = (TimePicker) findViewById(R.id.time_picker1); //resizePikcer(datePicker); butn = (Button) findViewById(R.id.butn_sure); // edt = (EditText) findViewById(R.id.number); butn.setOnClickListener(this); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub switch (arg0.getId()) { case R.id.butn_sure: // String str = edt.getText().toString(); // edt1.setText(str); StringBuffer sb = new StringBuffer(); sb.append(String.format("%d-%02d-%02d %02d:%02d", datePicker.getYear(), datePicker.getMonth() + 1, datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute())); if (i == 1) { edt5.setText(sb); } else if (i == 2) { edt6.setText(sb); } this.dismiss(); break; } } }
最后是在Activity的使用,我写在一个方法里:
private void mydialog() { Dialog dialog = new Mydialog(ApplicationCarActivity.this, R.style.MyDialog); Window window = dialog.getWindow();// builder.getWindow(); window.setGravity(Gravity.BOTTOM); // 此处可以设置dialog显示的位置 window.setWindowAnimations(R.style.mystyle); //dialog.setTitle("请设置时间"); dialog.show(); //dialog.getWindow().setLayout(620, 414); /* * 将对话框的大小按屏幕大小的百分比设置 */ WindowManager m = getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = window.getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight()*0.4); // 高度设置为屏幕的0.6 p.width =(int) (d.getWidth()); // 宽度设置为屏幕的0.65 window.setAttributes(p); }
大家互相参考学习,小作献丑了。谢谢大家光临寒舍!