zoukankan      html  css  js  c++  java
  • 自定义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>


    效果图:



















  • 相关阅读:
    TortoiseGit 合并主分支代码.pull request
    MVC EF 修改某些值
    MVC 提交表单
    MVC 统计之 自定义 列表
    MVC 起始页修改 区域
    asp.net C# MVC DropDownList
    asp.net C# MVC 提交表单后清空表单
    Python 线程启动的四种方式
    Git 命令的学习
    Node.js v10.1.0 Documentation
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207249.html
Copyright © 2011-2022 走看看