Dialog和DialogActivity

1 dialogactivity
以dialog形式弹出的对话框,可用于需要弹出的dialog比较复杂布局的情况,使用时,只需在manifest中为该activity设置为dialog主题,也可以对该主题进行重写相关属性,如下:

<style name="CustomDialogActivity" parent="android:style/Theme.Dialog">
    <item name="android:background">#00000000</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框为无 -->
</style>

在Activity中设置点击区域外消失属性

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //////设置为true点击区域外消失
    setFinishOnTouchOutside(true);
    setContentView(R.layout.activity_layout);
}

在activity中设置窗口显示位置:

getWindow().setGravity(Gravity.BOTTOM);

2 dialog
设置点击空白处关闭窗体:

dialog.setCanceledOnTouchOutside(true);
dialog.setCancelable(true);

自定义dialog样式,必须设置dialog.getWindow().setAttributes(p);否则,dialog的宽度和高度会非常小,不是预期所想:

private AlertDialog dialog;

private void showDialog() {
    if (dialog == null) {
        dialog = new AlertDialog.Builder(MyNongZiPlaceActivity.this,R.style.CustomDialog).create();
        dialog.show();
        dialog.setCanceledOnTouchOutside(true);// 设置点击屏幕Dialog不消失
        Window dialogWindow = dialog.getWindow();
        dialogWindow.setContentView(R.layout.dialog_exit_layout);
        WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
        p.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        p.width = (int) (getWindowManager().getDefaultDisplay().getWidth() * 0.8); // 宽度设置为屏幕的0.8*/
        dialogWindow.setAttributes(p);
        Button mPositiveButton = (Button) dialog.findViewById(R.id.positiveButton);
        TextView content = (TextView) dialog.findViewById(R.id.content_text);
        content.setText("此地区无乡镇,请填写详细地址");
        mPositiveButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
    } else {
        dialog.show();
    }
}

R.style.CustomDialog如下:

<style name="CustomDialog" parent="android:style/Theme.Dialog">
    <item name="android:background">#00000000</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框为无 -->
</style>

3.pregressDialog

package com.example.util;

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.widget.TextView;

import com.example.util.R;


public class CustomProgressDialog extends Dialog {
    public CustomProgressDialog(Context context, String strMessage) {
        this(context, R.style.CustomProgressDialog, strMessage);
    }

    public CustomProgressDialog(Context context, int theme, String strMessage) {
        super(context, theme);
        this.setContentView(R.layout.custom_progress_dialog);
        this.getWindow().getAttributes().gravity = Gravity.CENTER;
        TextView tvMsg = (TextView) this.findViewById(R.id.id_tv_loadingmsg);
        if (tvMsg != null) {
            tvMsg.setText(strMessage);
        }
    }

    //用于控制失去焦点后是否消失
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        if (!hasFocus) {
            //dismiss();
        }
    }
}

CustomProgressDialog的风格如下:

<style name="CustomProgressDialog" parent="@style/CustomDialog">
        <!--背景颜色及透明程度-->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--是否有标题 -->
        <item name="android:windowNoTitle">true</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--是否模糊-->
        <item name="android:backgroundDimEnabled">false</item>
    </style>

custom_progress_dialog.xml文件如下,一个垂直转动条和一个信息

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/progress_dialog_bg"
    android:padding="@dimen/common_padding_width" >

    <ProgressBar
        android:id="@+id/loadingImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="@dimen/common_inner_distance"
        android:indeterminateDrawable="@drawable/progress_medium" />

    <TextView
        android:id="@+id/id_tv_loadingmsg"
        android:layout_width="wrap_content"
        android:minWidth="120dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:gravity="center_horizontal"
        android:textColor="#ffffff"
        android:textSize="16sp" />

</LinearLayout>

android:indeterminateDrawable=”@drawable/progress_medium” 引用的是一个动画,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/progress_img"
    android:fromDegrees="0"
    android:pivotX="50.0%"
    android:pivotY="50.0%"
    android:toDegrees="360" />

这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值