如何使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、收工

时间: 2024-08-26 13:49:40

如何使Dialog像Activity一样随心所欲的使用?的相关文章

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

android中的Dialog像是寄生在Activity中.在弹出Dialog时.因受到系统风格定义,导致Dialog怎么也不能如意,那么今天就来探讨下Dialog的使用. 要全然自己定义一个Dialog.那么就不要extends AlertDialog.我们在使用Activity时,先准备一个布局文件xxx.xml,全部控件大小都能够在布局文件里写好. 事实上Dialog也能够这么做. 实现步骤: 1.准备好布局文件: 2.组织布局中的控件动作.写成一个ViewHolder,我这里写的是Tim

theme为dialog的Activity如何充满全屏

转自:http://blog.csdn.net/fzh0803/article/details/9787615 分类: android_点滴记录2013-08-06 10:33 2005人阅读 评论(0) 收藏 举报 系统中theme为dialog的activity总是不能充满全屏,有时候为了屏幕适配需要充满全屏,在stackoverflow上知道到了解决办法: @Override public void onCreate(Bundle savedInstanceState) { super.o

自制WheelView沉浸式菜单及Dialog样式Activity

自制一个简单的WheelView控件,配合Dialog样式的Activity使用 为什么不直接用Dialog呢? 因为感觉Dialog有时候传值会很麻烦,而且写起来也不方便.用Activity仿的话就很方便,效果也不错. 当然用Dialog也是可以的,具体根据项目需求和个人习惯而定. 效果图如下: 那么直接贴核心代码,源码我会在博客底部发链接 Dialog样式的Activity布局: <?xml version="1.0" encoding="utf-8"?&

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

原文:Android项目实战(七):Dialog主题Activity实现自定义对话框效果 想必大家都用过Dialog主题的Activity吧,用它来显示自定义对话框效果绝对是一个非常不错的选择. 即把activity交互界面以Dialog的形式展现出来,Dialog主题的Activity大小将以内容的宽高来决定 <activity android:name=”MainActivity” android:theme=”@android:style/Theme.Dialog”> </acti

Dialog主题Activity实现自定义对话框效果

想必大家都用过Dialog主题的Activity吧,用它来显示自定义对话框效果绝对是一个非常不错的选择. 即把activity交互界面以Dialog的形式展现出来,Dialog主题的Activity大小将以内容的宽高来决定 <activity android:name=”MainActivity” android:theme=”@android:style/Theme.Dialog”> </activity> 可以看到设置为Theme.Dialog主题的activity显示效果,

Dialog对Activity事件的操作

此功能的实现是利用了观察者模式(Listener)的写法,我对设计模式理解不深,就说说自己的想法吧. 首先是重写Dialog: <!-- lang: java --> public class SubmitDialog extends Dialog { public interface TrySubmitAgain //点击事件实现的核心接口,用于处理,传过来的事件 { public void makeCallBack(); //此方法接参数可以处理传过来的数据 } private Conte

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

本文出处:http://bbs.9ria.com/thread-204406-1-1.html 在做自动更新的时候,弹出Dialog提示,要求是只能点击更新或者取消更新时Dialog才会消失.但是在这个时候用户可能点击返回键,怎么让Dialog不消失呢? 首先想到重写Activity的onKeyDown,后来发现没有什么卵用. 百度了一下,找到原因了.不应该截取activity的 onkeydown事件,而应该截取dialog的key响应事件,当dialog在前台显示的时候,keylistene

Dialog向Activity传递数据

PopupDialog中声明一个内部接口PriorityListener,接口中声明一个回调函数refreshPriorityUI,用于在 Dialog的监听事件触发后刷新Activity的UI显示.然后在MainActivity中的Button点击事件中实现这个接口并将其作为 PopupDialog的构造函数的参数传入,并实现refreshPriorityUI()方法.话不多说,直接上代码—— PopupDialog代码: public class PopupDialog extends Di

android dialog和activity 改变出现消失的 动画样式

1 dialog 对话框出现和消失  使用的方法 <span style="white-space:pre"> </span>final Dialog dialog = new Dialog(this); dialog.show(); Window window = dialog.getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); window.setContentView(R