码迷,mamicode.com
首页 > 移动开发 > 详细

android自定义对话框

时间:2015-04-02 20:27:30      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

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);
        
        
        
        
    }

 

大家互相参考学习,小作献丑了。谢谢大家光临寒舍!

 

android自定义对话框

标签:

原文地址:http://www.cnblogs.com/ywnwa/p/4387912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!