怎样使Dialog像Activity一样随心所欲的使用?

android中的Dialog像是寄生在Activity中。在弹出Dialog时。因受到系统风格定义,导致Dialog怎么也不能如意,那么今天就来探讨下Dialog的使用。

要全然自己定义一个Dialog。那么就不要extends AlertDialog。我们在使用Activity时,先准备一个布局文件xxx.xml,全部控件大小都能够在布局文件里写好。

事实上Dialog也能够这么做。


实现步骤:
     1、准备好布局文件: 
     2、组织布局中的控件动作。写成一个ViewHolder,我这里写的是TimeViewHolder,构造函数中要两个參数:Context和View,这个                                                       ViewHolder与Activity的ViewHolder不一样,由于Activity是带布局的。所以能够不要View这个參数。

这个View能够看作是一个布局,全部的控件都以它为载体

public TimeViewHolder(Context activity, View view) {
     this.activity =
activity;        

     this.root =
view;

    }
     2、准备好一套风格:这个风格文件定义在res/values/styles.xml中,当然能够写到其它风格文件里
         < style name= "picture_mode" parent ="@android:Theme.Dialog" >
             < item name ="android:windowFrame" >@null </ item>
             < item name ="android:windowIsFloating" >true </ item>
             < item name ="android:windowIsTranslucent" >false </ item>
             < item name ="android:windowNoTitle" >true </ item> <!--除去title-->
             < item name ="android:windowContentOverlay" >@null </ item>
             < item name ="android:backgroundDimEnabled" >false </ item>
             < item name ="android:windowBackground" >@null </ item> <!--除去背景色-->
         </style >
     3、在Activity中创建Dialog:
          Dialog timeDialog = new Dialog( mActivity ,
                    R.style. picture_mode ) {//创建Dialog时。指定风格。带一个Content參数:mActivity
                 @Override
                 protected void onCreate(Bundle
savedInstanceState) {
                     // TODO Auto-generated
method stub
                     super .onCreate(savedInstanceState);
                    setContentView(R.layout. time );//在onCreate方法中,指定布局文件,因上面指定了风格。所以这个
                                                    //Dialog的大小位置全都会因这个layout决定,所以你想如何就如何
                    View mView=getWindow().getDecorView();//关键在这里,这个View,是你依据xml中的id来找相应控件的。

                     if (timeViewHolder == null)
{
                         timeViewHolder = new TimeViewHolder(mActivity ,
                                mView);
                    }

                }

                 @Override
                 protected void onStart()
{//在这种方法中,你能够实现一些交互动作
                     // TODO Auto-generated
method stub
                     super .onStart();

                    Log. i( "ytmfdw", "timeDialog onStart");
                     timeViewHolder .findViews();
                }

                 @Override
                 public boolean dispatchKeyEvent(KeyEvent
event) {//按键动作。
                     // TODO Auto-generated
method stub
                    
                     return super .dispatchKeyEvent(event);
                }
            };
            timeDialog.setOnDismissListener( new OnDismissListener() {//当Dialog消失时,做一些处理
                                                                      //由于这个Dialog出现时,我把Activity隐藏了,
                                                                      //所以在Dialog消失时,我要把Activity显示出来

                 @Override
                 public void onDismiss(DialogInterface
dialog) {
                     // TODO Auto-generated
method stub
                     linearlayout_tvset_menu .setVisibility(View. VISIBLE);//Activity显示出来
                     linearlayout_set_time .requestFocus();
                     timeViewHolder = null ;

                }
            });

            timeDialog.show();//Dialog创建完毕后。要显示的
     4、在ViewHolder中使用Dialog的布局中的控件:
   private View root ;
     private TextView tv_time_date ;
     public TimeViewHolder(Context activity, View view) {
         this .activity =
activity;
         this .root =
view;
         tvTimerManager = TvTimerManager.getInstance();
    }

     public void findViews()
{
         tv_time_date = (TextView) root .findViewById(R.id. tv_time_date);
        loadDataToUI();
    }
          
     5、收工
          
     

怎样使Dialog像Activity一样随心所欲的使用?的更多相关文章

  1. theme为dialog的Activity如何充满全屏

     转自:http://blog.csdn.net/fzh0803/article/details/9787615 分类: android_点滴记录2013-08-06 10:33 2005人阅读 评论 ...

  2. 安卓奇葩问题之:返回按键监听,使Dialog不消失

    本文出处:http://bbs.9ria.com/thread-204406-1-1.html 在做自动更新的时候,弹出Dialog提示,要求是只能点击更新或者取消更新时Dialog才会消失.但是在这 ...

  3. Android项目实战(七):Dialog主题Activity实现自定义对话框效果

    想必大家都用过Dialog主题的Activity吧,用它来显示自定义对话框效果绝对是一个非常不错的选择. 即把activity交互界面以Dialog的形式展现出来,Dialog主题的Activity大 ...

  4. Dialog向Activity传递数据

    PopupDialog中声明一个内部接口PriorityListener,接口中声明一个回调函数refreshPriorityUI,用于在 Dialog的监听事件触发后刷新Activity的UI显示. ...

  5. 使dialog可拖拽指令

    在项目开发过程中,需要支持dialog弹窗可拖拽,则需要对dialog添加指令.具体操作说明如下: (1)在用于存放指令的文件夹内,新建拖拽指令文件夹,例如命名为:el-dragDialog,如下所示 ...

  6. Android开发之使一打开activity等界面Edittext获取焦点,弹出软键盘java代码实现

    // 获取编辑框焦点 editText.setFocusable(true); //打开软键盘 IInputMethodManager imm = (InputMethodManager)getSys ...

  7. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...

  8. Android PopupWindow Dialog 关于 is your activity running 崩溃详解

    Android PopupWindow Dialog 关于 is your activity running 崩溃详解 [TOC] 起因 对于 PopupWindow Dialog 需要 Activi ...

  9. 使用windowAnimations定义Activity及Dialog的进入退出效果

    看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了.设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttrib ...

随机推荐

  1. ORACLE查询优化之is null和is not null优化

    最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候特别慢,只有自己优化sql了,以前没有优化过,所以记录下来自己的优化过程,本次是关于is null和 ...

  2. How Javascript works (Javascript工作原理) (四) 事件循环及异步编程的出现和 5 种更好的 async/await 编程方式

    个人总结: 1.讲解了JS引擎,webAPI与event loop合作的机制. 2.setTimeout是把事件推送给Web API去处理,当时间到了之后才把setTimeout中的事件推入调用栈. ...

  3. HDU-1083 Courses 二分图 最大匹配

    题目链接:https://cn.vjudge.net/problem/HDU-1083 题意 有一些学生,有一些课程 给出哪些学生可以学哪些课程,每个学生可以选多课,但只能做一个课程的代表 问所有课能 ...

  4. windows下安装redis以及测试 Window 下安装

    下载地址:https://github.com/dmajkic/redis/downloads. 下载到的Redis支持32bit和64bit.根据自己实际情况选择,将64bit的内容cp到自定义盘符 ...

  5. 大O时间复杂度

    大O表示法指出了在最糟情况下的运行时间.比较操作数,指出了算法运行时间的增速 常见的大O运行时间 O(logn):也叫对数时间,包括二分查找 O(n):也叫线性时间,包括简单查找 O(nlogn):包 ...

  6. WPF 列表自动换行

    原文:WPF 列表自动换行 本文告诉大家如何在 ListView 或 ListBox 使用 WrapPanel 让里面的控件自动换行 在 WPF 可以通过修改 ItemsPanel 设置使用不同的 I ...

  7. 题解 P3834 【【模板】可持久化线段树 1(主席树)】

    可持久化线段树的前置知识是权值线段树,但是你不学也没有太大的关系因为思想不是很难理解. 可持久化线段树支持历史记录查询,这是它赖以解题的方法. 在本题中思路是建立n颗线段树,然后对于每次询问,考虑其中 ...

  8. HDU 1827 Summer Holiday(强连通)

    HDU 1827 Summer Holiday 题目链接 题意:中文题 思路:强连通缩点,每一个点的权值为强连通中最小值,然后入度为0的点就是答案 代码: #include <cstdio> ...

  9. 实现浮点数的四舍五入RoundOff,保留几位小数

    直接上代码,非常简短 double myRound(double d,int n) { d = d*pow(10,n); d += 0.5; d = (long)d; d = d/pow(10,n); ...

  10. 从client(content=&quot;&lt;p&gt;&lt;/p&gt;&quot;)中检測到有潜在危急的 Request.Form 值。

    最近的站点要做一个新闻模块,站点后台须要对新闻进行管理,拿到富文本编辑器的内容,在获取的时候会报一个错误:从client(content="<p>.....</p>& ...