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

    }

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

时间: 2024-12-16 11:41:17

android自定义对话框的相关文章

android 自定义对话框

新建一个布局文件 my_dialog.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

Android 自定义对话框,进度条,下拉刷新等

这个demo集合了自定义对话框,进度条,下拉刷新以及popup弹出框等.是学习了网上开源项目后,抽取集合了常用对话框,进度条,下拉刷新以及popup弹出框等.现在结构目录简单,更易于学习和扩展使用.注释都卸载代码.下面进行简单的介绍以及部分代码展示. 本文demo下载:点击 1.整体实现的效果图 2.项目结构图 这上面项目结构图也是一目了然,有什么功能展示.大家也看到了,这上面类有点多,如果全部贴出来,不大可能,有兴趣下载本文源码. 3.看看基础类BaseActivity 我就贴一下基础类,还有

Android自定义组件系列【13】——Android自定义对话框如此简单

在我们的日常项目中很多地方会用到对话框,但是Android系统为我们提供的对话框样子和我们精心设计的界面很不协调,在这种情况下我们想很自由的定义对话框,或者有的时候我们的对话框是一个图片,没有标题和按钮,例如这样的一系列需求,这一篇文章我们来给大家介绍一下如何像使用Activity一样来自定义我们的对话框. 一般自定义对话框有下面几种办法: 1.重写Dialog来实现. 2.获取Dialog的Window对象实现. 3.使用WindowManager来实现. 4.使用DialogTheme来实现

Android自定义对话框实现QQ退出界面

效果 首先看下qq的效果图,点击菜单按钮后点退出就会出现如图的对话框. 从上图可以看出,该对话框有一个圆角,以及标题,提示信息,两个按钮,按钮颜色是白色,按钮点击后背景会变成灰色,正常状态下对话框的背景色是白色.并且除了点击取消按钮和返回键外,点击屏幕其他区域该对话框不会小时.那么现在我们来实现一下这个对话框.我们实现后的效果如下图所示 实现 首先编写我们的背景,背景默认情况下是白色的,并且有一个圆角,使用shape实现 <?xml version="1.0" encoding=

Android自定义对话框(Dialog)位置,大小

代码: package angel.devil; import android.app.Activity;import android.app.Dialog;import android.os.Bundle;import android.view.Gravity;import android.view.Window;import android.view.WindowManager; public class DialogDemoActivity extends Activity { /** C

Android 自定义对话框(Dialog)位置,大小

代码: package angel.devil; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.Gravity; import android.view.Window; import android.view.WindowManager; public class DialogDemoActivity extends Activity {

Android 自定义对话框使用静态Handler传递参数

JsdMainDialog.java package com.jsd.demo; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import andr

Android自定义View(1):对话框-Dialog

Android系统自带的对话框,在很多android 5.0以下系统的手机上,简直目不忍视,所以UI设计基本上都需要自定义对话框,漂亮的对话框五花八门,android如何设计一种简单的自定义对话框呢. 一,Dialog需要注意的问题 android 弹出dialog必须存在所属的activity,不能凭空产生,所以dialog不能在application类里面new,必须在activity onCreate之后new. 1,默认的dialog public Dialog(Context cont

Android开发学习笔记-自定义对话框

系统默认的对话框只能显示简单的标题内容以及按钮,而如果想要多现实其他内容则就需要自定义对话框,下面是自定义对话框的方法. 1.先定义对话框的模版 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="300d