自定义Dialog

自定义Dialog

Dialog是一种提示用户做决定的小窗口,它一般不会布满整个屏幕,它可以请求用户在程序处理之前做一动作。比如:当退出应用的时候,可以提示用户是否真的需要退出应用,等等。
android提供了Dialog一些默认布局和样式,在一些的情况下,它不满足需求,那么,我们就需要自定义Dialog了。当然我们没有必要自己实现,可以对Dialog的Style进行一些定制,就可以很容易达到我们的需求。

下面就做一个简单的例子:

自定义的一个Dialog的style:
<style name="popupDialog" parent="@android:style/Theme.Dialog">
         <item name="android:windowFrame">@null</item><!-- 边框 -->
        <item name="android:windowIsFloating">true</item><!-- 是否悬浮在activity上   false: dialog 布满整个屏幕, true,显示指定大小-->
        <item name="android:windowIsTranslucent">true</item><!-- 半透明 -->
        <item name="android:windowNoTitle">true</item><!-- 无标题   false 的时候,在没有给定title的情况下,会比true的情况显示要长(title显示了,没有内容而已),-->
        <item name="android:windowBackground">@drawable/skin2_dialog_bottom</item><!-- 背景透明 背景颜色-->
        <item name="android:backgroundDimEnabled">true</item><!-- 模糊 false: 整个界面不会有遮罩层-->
        <item name="android:backgroundDimAmount">0.6</item><!-- 灰度  当android:backgroundDimEnabled=true时,这个参数才有用,值越大,遮罩层颜色越深。-->
        <item name="android:windowAnimationStyle">@style/dialog_animation</item><!-- 弹出或者进入时的动画效果 -->
        <item name="android:windowContentOverlay">@null</item><!-- 对话框是否有遮盖 -->
        <item name="android:colorBackgroundCacheHint">@null</item><!-- 背景缓存颜色 -->
    </style>

@drawable/skin2_dialog_bottom:


@style/dialog_animation:

<style name="dialog_animation">
        <item name="android:windowEnterAnimation">@anim/fading_in</item>
        <item name="android:windowExitAnimation">@anim/fading_out</item>
    </style>

@anim/fading_in:

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha 
        android:duration="500"
        android:fromAlpha="0.1"
        android:toAlpha="1.0"
        />
</set>

@anim/fading_out:

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha 
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.1"
        />
</set>
MainActivity:
package com.hualu.dialog;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button custom_style ;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		custom_style = (Button)findViewById(R.id.custom_style) ;
		custom_style.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				verifyDialog("custom_style verify") ;
			}
		});
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	
	private void verifyDialog(String msg)
    {
        final Dialog dialog = new Dialog(MainActivity.this, R.style.popupDialog);
        dialog.setContentView(R.layout.verify_dialog);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        TextView message = (TextView)dialog.getWindow().findViewById(R.id.messageTxt);
        Button okBtn = (Button)dialog.getWindow().findViewById(R.id.dismissBtn);
        message.setText(msg);
        okBtn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                if(dialog!=null && dialog.isShowing())
                {
                    dialog.dismiss();
                }
            }
        });
        if(dialog!=null && !dialog.isShowing())
        {
            dialog.show();
        }
    }

}
verify_dialog:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/messageTxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="57dp"
        android:text="TextView" />

    <Button
        android:id="@+id/dismissBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/messageTxt"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="45dp"
        android:text="Button" />

</RelativeLayout>


效果图:



















原文地址:https://www.cnblogs.com/javawebsoa/p/3074198.html