android AlertDialog Dialog显示位置、大小,背景

时间:2022-11-01 11:04:40
AlertDialog 设置大背景及大小要在show()之后才有效果


小米系统AlertDialog有个黑边框且显示在屏幕顶部。去掉黑边框可以用


​dialog.getWindow().setBackgroundDrawableResource(int recrous);


UserListWin.this.commitDialog.getWindow().setBackgroundDrawableResource(R.drawable.tou);//设置dialog背景要在show()之后否则会报错


R.drawable.tou 为一张透明图片​






设置了dialog大小


UserListWin.this.commitDialog.getWindow().setLayout(400, 500);//设置Dialog大小要在show()之后否则没效果(设置了dialog大小后,对于小米手机addContentView中的布局文件可以居中显示。(开始语音识别显示的图标不能再dialog中居中显示))


设置dialog显示位置


Window w=UserListWin.this.commitDialog.getWindow();


android.view.WindowManager.LayoutParams lp=w.getAttributes();


lp.y=150;


lp.x=100;​






dialog.setContentView(R.layout.d);//ad.setContentView(int layoutResID);要在show()之后添加才有效果,否则报错。ad.setContentView(View view)可以在show()之前添加​














参考:


来自:http://wbj05791467.blog.163.com/blog/static/12032969720121071553666/


关于AlertDialog的自定义样式  


2012-11-07 16:10:35|  分类: Android|举报|字号 订阅


    
android <wbr>AlertDialog <wbr>Dialog显示位置、大小,背景
 
 
android <wbr>AlertDialog <wbr>Dialog显示位置、大小,背景
 
 
下载LOFTER客户端
       最近两周真是闲得慌,项目上都没我啥事,最多就是改改字符串这种没技术含量活儿。还好我知道空闲的时候该干什么,那就是继续编写我的音乐播放器。
       我是仿造天天动听来编写自己的播放器的,当然功能远没有它的完善。最近想实现天天动听上的一个功能:在歌曲列表中的item添加一个按钮,点击此按钮弹出一个AlertDialog,该AlertDialog中有一个TextView,下面是一个ListView。Textview用来显示该item所对应的歌曲的名称,ListView则是一些选项(歌曲信息,移除,设为铃声什么的):


关于AlertDialog的自定义样式 - peculiar - art of devil 
 
       好吧,刚刚用hierarchyviewer看了以下天天动听的布局,发现是个PopupWindow。


       我用的是自定义的一个AlertDialog。但是从昨天开始直到现在,我才获得了自己想要的效果。
       关于如何将ListView绑定到AlertDialog上,可以用以下几种方法实现:
       一、AlertDialog.Builder.setItems(CharSequence[] items, OnClickListenerlistener)。items就是你想要添加到AlertDialog的一个list,listener是为list设置的监听器,你只需在里面添加自己想要的动作即可。该方法比较简单。
       二、AlertDialog.Builder.setAdapter (ListAdapter adapter,DialogInterface.OnClickListener listener)。这里你需要先定义一个ListAdapter,Adapter可以说是将数据绑定到UI的桥梁,功能很强大,listener与第一种方法里的一样。而且对于我这种菜鸟来说掌握它的用法与比较难。
       关于如何自定义AlertDialog样式:
       一、AlertDialog.Builder.setView(View view)。这个view是事先从定义好的XML文件里获取的,关于如何获取可以用下面代码实现:






LayoutInflater inflater = LayoutInflater.from(Context context);


View view = inflater.inflate(R.layout.alertdialog, null);//这里的R.layout.alertdialog即为你自定义的布局文件
       二、view.Window.setContentView(View view)。主要代码如下:






AlertDialog mAlertDialog = builder.create();


mAlertDialog.show();


mAlertDialog.getWindow().setContentView(view);
      关于两者的区别,大家可以看这个链接:http://www.x2x1.com/show/6040883.aspx。
      大致就是setView()只会覆盖AlertDialog的Title与Button之间的那部分,而setContentView()则会覆盖全部。但是否真的是这样呢?还有待验证。
      还有一点要注意的是:setContentView()必须放在show()的后面,不然会报错。如果你要在代码里修改AlertDialog的大小,可以用以下代码实现:






mAlertDialog.getWindow().setLayout(150, 320);
      但是这段代码同样需要放在show()的后面,不然你的改动会没有效果。


      如果可以成功地完成上述步骤,你差不多就可以自定义一个自己想要的AlertDialog了。但遗憾的是,我始终不知道怎么自定义AlertDialog的Title。最后我在http://blog.csdn.net/chuekup/article/details/8018513找到了一些思路:
      1. 先自定义一个AlertDialog布局alertdialog.xml,包括两部分:一个textView 用来显示Title;一个ListView显示相关的选项: