修改系统AlertDialog样式、自定义Dailog-----Activity透明效果

来源:互联网 发布:m2数据 2016 编辑:程序博客网 时间:2024/05/16 11:29

 

代码地址:   点击打开链接地址

另一片自定义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() {@Overridepublic 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);//点击其他地方无法取消该AlertDialogmLoadingDialog.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();@Overrideprotected 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() {@Overridepublic void run() {if (dialog != null) {dialog.closeLoading();}}};private Runnable alertDialogByStyleRunnable = new Runnable() {@Overridepublic void run() {if (keyLoadDialog != null) {keyLoadDialog.cancel();keyLoadDialog.dismiss();}}};@Overridepublic 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>

0 0
原创粉丝点击