Android(安卓)dialog 对话框自定义布局
16lz
2021-01-24
搞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学习笔记:TabHost 和 FragmentTabHost
- Android(安卓)camera 设置聚焦区域
- Android(安卓)Studio Gradle配置
- [整]Android(安卓)SlidingMenu Demo 环境搭建
- Android应用完全退出终极篇【转】
- Android UI Design Tips(Google官方出品:Android UI 设计指导)—
- Android对话框的高级设置《一》设置对话框按钮的图像和在内容文
- Android中Activity之间通信
- Android教程(1) - HelloWorld及Android项目结构介绍