代码地址: 点击打开链接地址
另一片自定义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>
<?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 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>