您的位置:首页 > 移动开发 > Android开发

Android dialog 对话框自定义布局

2015-12-25 19:06 453 查看
搞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);
	}
	
	
}


子类调用

@Override
	protected 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 则除了内容区域以外的区域都是透明的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: