自定义ProgressDialog(无遮罩效果)
16lz
2021-01-23
1.自定义progressDialog的theme:
<!-- 自定义Dialog --> <style name="Custom_Progress" parent="@android:style/Theme.Dialog"> <!-- 无边框 --> <item name="android:windowFrame">@null</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <!--无遮罩效果--> <item name="android:backgroundDimEnabled">false</item> </style>
2.自定义的CustomProgressDialog extends Dialog:
package com.ylj.progressdialogdemo;import android.app.Dialog;import android.content.Context;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import android.widget.TextView; public class CustomProgressDialog extends Dialog { private static CustomProgressDialog dialog;public CustomProgressDialog(Context context) { super(context); } public CustomProgressDialog(Context context, int theme) { super(context, theme); } /** * 弹出自定义ProgressDialog * * @param context * 上下文 * @param message * 提示 * @param cancelable * 是否可取消 * @param cancelListener * 按下返回键监听 * @return */ public static CustomProgressDialog show(Context context, CharSequence message, boolean cancelable, OnCancelListener cancelListener) { if(dialog == null){ dialog = new CustomProgressDialog(context, R.style.Custom_Progress); } dialog.setTitle(""); dialog.setContentView(R.layout.layout_progress_dialog); if (message == null || message.length() == 0) { dialog.findViewById(R.id.tv_message).setVisibility(View.GONE); } else { TextView tv_message = (TextView) dialog.findViewById(R.id.tv_message); tv_message.setText(message); } // 按返回键是否取消 dialog.setCancelable(cancelable); // 监听返回键处理 dialog.setOnCancelListener(cancelListener); // 设置居中 dialog.getWindow().getAttributes().gravity = Gravity.CENTER; WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); // 设置背景层透明度 lp.dimAmount = 0.1f; dialog.getWindow().setAttributes(lp); dialog.show(); return dialog; } /** * 关闭dialog */ public static void dimiss() { if(dialog != null && dialog.isShowing()){ dialog.dismiss(); } }}
3.layout_progress_dialog.xml 布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/progress_custom_bg" android:gravity="center_horizontal" android:orientation="vertical" android:paddingBottom="20dp" android:paddingLeft="25dp" android:paddingRight="25dp" android:paddingTop="20dp" > <ProgressBar android:id="@+id/pb" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_horizontal" /> <TextView android:id="@+id/tv_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="3dp" android:textSize="16sp" /></LinearLayout>
4.MainActivity:
package com.ylj.progressdialogdemo;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn_save).setOnClickListener(this);}@Overridepublic void onClick(View v) {new LoginTask().execute();}private class LoginTask extends AsyncTask<Void, Void, Void> {@Overrideprotected void onPreExecute() {CustomProgressDialog.show(MainActivity.this, "登录中...", false, null);super.onPreExecute();}@Overrideprotected Void doInBackground(Void... params) {try {new Thread().sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(Void result) {super.onPostExecute(result);CustomProgressDialog.dimiss();}}}
5.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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.ylj.progressdialogdemo.MainActivity" > <Button android:id="@+id/btn_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="登录" /></RelativeLayout>
效果图如下:
更多相关文章
- 转:android 图片叠加效果——两种方法
- 动态广告布局
- Android自定义添加圆角渐变色按钮+点击效果
- 设置android的布局文件的背景颜色为黑色
- android 按钮效果的两种实现方法
- Android---63---Android中的动画效果
- 分享Android仿刮奖效果控件
- Android 属性动画实现的扇形菜单效果
- Android 仿IOS解锁锁屏文字抖动效果