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

Dialog和DialogActivity

2016-05-25 17:29 501 查看
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" />


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 对话框