搞Android四年了 自定义dialog布局一直都写不好。。

今天来汇总一下


Activity中用到自定义的dialog

一般情况下

public class BaseDialog extends Dialog {public BaseDialog(Context context) {super(context);}public BaseDialog(Context context, int layout) {super(context);setContentView(layout);}}

public class AppLoading extends BaseDialog {/** * 需要传入一个Activity对象 *  * @param context */public AppLoading(Context context) {super(context, R.layout.app_loading);}}

子类调用

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);AppLoading loading = new AppLoading(getContext());loading.show();}

显示出来的效果图



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="200dip"    android:layout_height="150dip"    android:layout_gravity="center"    android:gravity="center"    android:orientation="vertical"     android:background="@android:color/white"    android:padding="10dip">    <ProgressBar        android:layout_width="wrap_content"        android:layout_height="wrap_content"/>    <TextView        android:id="@+id/app_loading_message"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="5dip"        android:gravity="center_horizontal"        android:text="content"/></LinearLayout>

这个是布局。。。。。。。。。。。。。。。。

---------------------------------------------------------------------------

可以看到对话框的宽度基本上充满屏幕了,然后高度也比内容区的高


网上查了一下解决办法, 然后经过部分代码的重构 整理如下

                   @Override   public void show() {Window win = getWindow();win.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = win.getAttributes();lp.width = WindowManager.LayoutParams.WRAP_CONTENT;lp.height = WindowManager.LayoutParams.WRAP_CONTENT;        win.setAttributes(lp);win.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));win.setLayout(lp.width, lp.height);super.show();}


边框的问题基本上解决了

但是除了内容区之外的区域有点黑。。如果不想要背景变黑,则需要设置一下 dialog 的theme

<style name="app_loading_theme" parent="android:Theme.Dialog">        <!-- 是否支持透window明度 -->        <item name="android:windowIsTranslucent">true</item>        <!-- window背景颜色 -->        <item name="android:windowBackground">@android:color/transparent</item>        <!-- 屏幕内容区域以外的背景是否可以设置灰度值(与backgroundDimAmount搭配使用) -->        <item name="android:backgroundDimEnabled">true</item>        <!-- 灰度值 -->        <item name="android:backgroundDimAmount">0.2</item>    </style>
构造方法的时候使用Dialog的构造方法 public Dialog(Context context, int theme)
public BaseDialog(Context context, int theme, int layout) {super(context, theme);setContentView(layout);}


如果android:backgroundDimAmount 改为 0.0 则除了内容区域以外的区域都是透明的


更多相关文章

  1. Android学习笔记:TabHost 和 FragmentTabHost
  2. Android(安卓)camera 设置聚焦区域
  3. Android(安卓)Studio Gradle配置
  4. [整]Android(安卓)SlidingMenu Demo 环境搭建
  5. Android应用完全退出终极篇【转】
  6. Android UI Design Tips(Google官方出品:Android UI 设计指导)—
  7. Android对话框的高级设置《一》设置对话框按钮的图像和在内容文
  8. Android中Activity之间通信
  9. Android教程(1) - HelloWorld及Android项目结构介绍

随机推荐

  1. Android媒体开发之音乐播放器
  2. Android点击EditText以外区域,键盘消失
  3. Android——Toast.makeText()
  4. Android(安卓)NDK生成共享库和静态库
  5. Android(安卓)AsyncTask基础知识整理
  6. android中的launcher介绍
  7. Android(安卓)录制mp3使用mp3lame 库
  8. android客户端访问服务端tomcat
  9. ToolBar随ScrollView的滚动改变透明度
  10. android wifi讲解 wifi列表显示