自定义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>

 


效果图:

自定义Dialog


















 

你可能感兴趣的:(dialog)