代码地址: 点击打开链接地址
另一片自定义dialog点击打开链接
主页面布局--2个button(一个弹出alertDialog,一个是自定义dialog)
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.dialogdemo.MainActivity" >
<Button
android:id="@+id/alertDialogByCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="alertDialog代码实现" />
<Button
android:id="@+id/alertDialogByStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/alertDialogByCode"
android:text="alertDialog style实现" />
</RelativeLayout>
————————————接下来先看ShowProgressDialog————————————
接下来先看ShowProgressDialog的布局文件
showprogressdialog_loading_waiting.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp"
>
<RelativeLayout
android:id="@+id/ll_pb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<ProgressBar
android:id="@+id/loading_process_dialog_progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:indeterminate="false"
android:indeterminateDrawable="@drawable/rotate_dialog_style_xml_color" />
<TextView
android:id="@+id/hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/loading_process_dialog_progressBar"
android:layout_marginTop="6dp"
android:layout_centerHorizontal="true"
android:text="加载中..."
android:textColor="#4389c5"
android:textSize="12dp" />
</RelativeLayout>
</RelativeLayout>
rotate_dialog_style_xml_color.xml--旋转的动画效果
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:drawable="@drawable/loading_progress"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="1080" >
</rotate>
ShowProgressDialog
package com.example.dialogdemo;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.view.KeyEvent;
import android.widget.TextView;
public class ShowProgressDialog {
private Dialog mLoadingDialog = null;
public Dialog getDialog(){
return mLoadingDialog;
}
/**
* 开启等待对话框
*/
public void showLoading(Context context,String hint) {
OnKeyListener keyListener = new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME
|| keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
}
return false;
}
};
/**
* 如果创建的话,如果之前有的话,就直接清空在创建
*/
closeLoading();
//创建AlertDialog实例
mLoadingDialog = new AlertDialog.Builder(context).create();
//设置监听事件---只有按下返回、搜索才可以响应
mLoadingDialog.setOnKeyListener(keyListener);
//点击其他地方无法取消该AlertDialog
mLoadingDialog.setCanceledOnTouchOutside(false);
try {
//最后显示出来即可
mLoadingDialog.show();
//填充AlertDialog的布局
mLoadingDialog.setContentView(R.layout.showprogressdialog_loading_waiting);
//默认是加载中...,如果需要更换可以替换文字
((TextView)mLoadingDialog.findViewById(R.id.hint)).setText(hint);
} catch (Exception e) {
}
}
/**
* 替换原来的文字
*/
public void setHint(String hint) {
((TextView)mLoadingDialog.findViewById(R.id.hint)).setText(hint);
}
/**
* 关闭等待对话框
*/
public void closeLoading() {
if (mLoadingDialog != null)
try {
mLoadingDialog.dismiss();
mLoadingDialog.cancel();
} catch (Exception e) {
}
mLoadingDialog = null;
}
}
————————————————接下来在看自定义dialog————————————————
接下来在看自定义dialog的布局--在开发工具上是填满横屏幕的,需要按着真机--android:layout_width="300dp"key_load_dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="64dp"
android:layout_marginLeft="17dp"
android:gravity="center_vertical"
android:text="开启加密服务"
android:textColor="#54c0e8"
android:textSize="20sp" />
<ImageView
android:id="@+id/devider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_below="@id/title"
android:layout_marginBottom="16dp"
android:background="#54c0e8" />
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_below="@id/devider"
android:layout_marginLeft="30dp" />
<TextView
android:id="@+id/secondTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/devider"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@+id/progressbar"
android:gravity="center_vertical"
android:text="正在为您下载私人密钥"
android:textColor="#000"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/secondTitle"
android:layout_marginLeft="8dp"
android:layout_marginRight="30dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="30dp"
android:layout_toRightOf="@+id/progressbar"
android:lineSpacingExtra="3dp"
android:text="私人密钥用于保障您的本地和通讯安全,他人无法盗用"
android:textColor="#666666"
android:textSize="14sp" />
</RelativeLayout>
style样式
<style name="Godinsec_Diglog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item> <!-- 边框 -->
<item name="android:windowIsFloating">true</item> <!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item> <!-- 半透明 -->
<item name="android:windowNoTitle">true</item> <!-- 无标题 -->
<item name="android:windowBackground">@android:color/transparent</item> <!-- 背景透明 -->
<item name="android:backgroundDimEnabled">true</item> <!-- 模糊 -->
</style>
DialogCreateUtils
package com.example.dialogdemo;
import android.app.Dialog;
import android.content.Context;
/**
* @author dandy
*/
public class DialogCreateUtils {
/**
*下载key提示的dialog
*/
public static Dialog createKeyLoadDialog(Context mContext){
Dialog keyLoadDialog = new Dialog(mContext, R.style.Godinsec_Diglog);
keyLoadDialog.setContentView(R.layout.key_load_dialog_layout);
keyLoadDialog.setCanceledOnTouchOutside(false);
keyLoadDialog.show();
return keyLoadDialog;
}
}
MainActivity
package com.example.dialogdemo;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
private Button alertDialogByCode;
private Button alertDialogByStyle;
private Handler mHandler = new Handler();
Dialog keyLoadDialog = null;
ShowProgressDialog dialog = new ShowProgressDialog();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alertDialogByCode = (Button) findViewById(R.id.alertDialogByCode);
alertDialogByStyle = (Button) findViewById(R.id.alertDialogByStyle);
alertDialogByCode.setOnClickListener(this);
alertDialogByStyle.setOnClickListener(this);
}
private Runnable alertDialogByCodeRunnable = new Runnable() {
@Override
public void run() {
if (dialog != null) {
dialog.closeLoading();
}
}
};
private Runnable alertDialogByStyleRunnable = new Runnable() {
@Override
public void run() {
if (keyLoadDialog != null) {
keyLoadDialog.cancel();
keyLoadDialog.dismiss();
}
}
};
@Override
public void onClick(View v) {
if (v.getId() == R.id.alertDialogByCode) {
dialog.showLoading(this, "注册中。。。");
mHandler.postDelayed(alertDialogByCodeRunnable, 4000);
}
if (v.getId() == R.id.alertDialogByStyle) {
if (keyLoadDialog == null) {
keyLoadDialog = DialogCreateUtils
.createKeyLoadDialog(MainActivity.this);
}
mHandler.postDelayed(alertDialogByStyleRunnable, 4000);
}
}
}
————————————————————关于Activity透明的样式——————————————————
<activity
android:name=".ui.gesture.GestureVerifyActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/Transparent" >
</activity>
<style name="Transparent">
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
<color name="transparent">#00000000</color>
或者直接设置背景即可
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:background="#7A000000" >
<activity
android:name=".ui.LandScapeActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action android:name="com.godinsec.seland.landscape" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>