标签:
android自定义对话框
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);
}
大家互相参考学习,小作献丑了。谢谢大家光临寒舍!
标签:
原文地址:http://www.cnblogs.com/ywnwa/p/4387912.html