标签:
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); }
最终得到的效果是:
标签:
原文地址:http://www.cnblogs.com/hsji/p/5113859.html