在项目当中不可避免会使用一些自定义的提示框,如下图所示:
个人感觉这个还不错,,,全屏显示,,,
下面,让我们一起学习,如何实现当前效果。。。
实现思路如下:
1. 首先自定义一个dialog类,在类中设置当前dialog样式,居中方式等;
2. 代码中应用即可。
那么,我们先开始第一步:自定义一个dialog类:
package com.example.hlq.weight;
import com.example.hlq.R;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.widget.TextView;
public class MyProgressDialog extends Dialog{
//将当前上下文对象以及要提示的信息传入进来
//R.style.CustomProgressDialog样式在本地style下定义
public MyProgressDialog(Context context, String msg) {
this(context, R.style.CustomProgressDialog, msg);
}
public MyProgressDialog(Context context, int theme, String msg) {
super(context, theme);
this.setContentView(R.layout.my_dialog);
//设置点击外部无效
this.setCanceledOnTouchOutside(false);
//设置点击返回键可以dismiss
this.setCancelable(true);
//设置居中显示
this.getWindow().getAttributes().gravity = Gravity.CENTER;
//初始化文本框
TextView tvMsg = (TextView) this.findViewById(R.id.id_tv_loadingmsg);
//设置文本框内提示信息
tvMsg.setText(msg);
}
public MyProgressDialog setMessage(String msg){
TextView tvMsg = (TextView) this.findViewById(R.id.id_tv_loadingmsg);
tvMsg.setText(msg);
return this;
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (!hasFocus) {
dismiss();
}
}
}
接下来要在style中定义当前dialog样式:
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<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>
</style>
<style name="CustomProgressDialog" parent="@style/CustomDialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>
在Drawable下创建一个动画文件:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<item
android:drawable="@drawable/ic_loading_white_01"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_02"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_03"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_04"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_05"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_06"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_07"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_08"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_09"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_10"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_11"
android:duration="83"/>
<item
android:drawable="@drawable/ic_loading_white_12"
android:duration="83"/>
</animation-list>
最后一步,在activity中调用。。。
package com.example.hlq;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.hlq.weight.MyProgressDialog;
public class MainActivity extends Activity {
private boolean isDiaLogshow=false;
private MyProgressDialog myProgressDialog;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myProgressDialog=new MyProgressDialog(MainActivity.this, "Loading");
btn=(Button) findViewById(R.id.btn);
//这里我写的是点击按钮之后弹出diglog
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDiaLog("正在加载");
}
});
}
/**
* 弹出DiaLog
* 这块个人建议可以放到BaseActivity中,如果diglog使用比较多时
* @param message
* 2016-4-19
*/
protected void showDiaLog(String message) {
if (message != null || !message.equals("")) {
myProgressDialog.setMessage(message);
}
myProgressDialog.show();
isDiaLogshow = true;
}
/**
* 释放DiaLog
* 这块个人建议可以放到BaseActivity中,如果diglog使用比较多时
* 2016-4-19
*/
protected void dismissDiaLog() {
if (isDiaLogshow == true) {
myProgressDialog.dismiss();
isDiaLogshow = false;
}
}
}
好了,,,一个自定义dialog就这样实现了,,,
PS:
技术的积累,就是从点滴开始积累。。。加油!!!我是菜鸟,我怕谁。。。
项目中所使用到的图片如下: |
一枚96年Android鼠,热衷分享个人笔记,希望帮助一些小伙伴。目前除了Android老本行,涉猎Flutter、伪前端等,欢迎一起交流学习~