zoukankan      html  css  js  c++  java
  • 自定义loading dialog

    一、背景介绍

        App在进行比较耗时操作时,通常会给用户一个提示。这样做,一方面照顾到了用户情绪;另一方面也可以避免用户在一头雾水的情况下误操作。比较通常的一种做法:在页面上显示一个“加载中”的Dialog,操作完成之后销毁该Dialog。我在这里把它称为LoadingDialog,下面记录一下我的实现。

    二、原理

        扩展Dialog,在不改变其行为的前提下改变其外观。主要进行了两个方面的自定义:

            1.自定义Dialog的布局文件;

            2.自定义Dialog的style;

    三、实现

    (1)自定义Dialog的布局文件:

    //res/layout/dialog_loading
    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" android:orientation="vertical"> <LinearLayout android:layout_width="150dp" android:layout_height="150dp" android:gravity="center_vertical|center_horizontal" android:orientation="vertical"> <ProgressBar android:id="@android:id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> <TextView android:id="@android:id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="8dp" android:gravity="center" android:textColor="@android:color/white" android:textSize="12sp" android:visibility="visible"/> </LinearLayout> </RelativeLayout>

    (2)自定义Dialog的style:

    <style name="WinDialog" parent="@android:style/Theme.Dialog">
            <!--去掉Dialog的windowFrame框-->
            <item name="android:windowFrame">@null</item>
            <!--浮在activity之上-->
            <item name="android:windowIsFloating">true</item>
            <!--非半透明-->
            <item name="android:windowIsTranslucent">false</item>
            <!--去掉title-->
            <item name="android:windowNoTitle">true</item>
            <!--dialog的背景透明-->
            <item name="android:windowBackground">@android:color/transparent</item>
    
        </style>
    

     (3)扩展Dialog,使用上述layout和style:

    public class LoadingDialog extends Dialog{
    
        /**
         * 提示文字
         */
        private TextView mTextView;
    
        public LoadingDialog(Context context) {
            //使用自定义的Style
            super(context, R.style.WinDialog);
            //使用自定义的layout
            setContentView(R.layout.dialog_loading);
            mTextView = (TextView) findViewById(android.R.id.message);
        }
        
        public void setText(String s) {
            if (mTextView != null) {
                mTextView.setText(s);
                mTextView.setVisibility(View.VISIBLE);
            }
        }
    
        public void setText(int res) {
            if (mTextView != null) {
                mTextView.setText(res);
                mTextView.setVisibility(View.VISIBLE);
            }
        }
    }
    

    四、使用

    LoadingDialog dialog = new LoadingDialog(this);
    dialog.setText("加载中,请稍候。。。");//设置提示信息
    dialog.setCancelable(false);//把dialog设置成不可取消的,用户点击屏幕dialog不消失    默认是true  即点击屏幕之后dialog消失  
    dialog.show();
    

     注意:如果设置setCancelable为false的话,使用手机的返回键dialog也不会消失。如果希望点击屏幕时dialog不消失,按下返回键时dialog消失可以重写onTouchEvent方法:

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                return false;
            }
            return super.onTouchEvent(event);
        }
    

    最终得到的效果是:

  • 相关阅读:
    信息安全系统设计基础实验五:通讯协议设计
    信息安全系统设计基础实验三:实时系统的移植 (135317、135337)
    信息安全系统设计基础实验四:外设驱动程序设计
    信息安全系统设计基础实验二:固件设计(135317、135337)
    20135337——信息安全设计基础第十周学习笔记
    信息安全系统设计基础实验一:Linux开发环境的配置和使用(135317、135337)
    20135337——信息安全设计基础第九周学习笔记
    20135337——信息安全设计基础第八周学习笔记
    20135337——信息安全设计基础第七周复习笔记
    20135337——作业
  • 原文地址:https://www.cnblogs.com/hsji/p/5113859.html
Copyright © 2011-2022 走看看