之前写了两篇关于Dialog的算是文章吧(2333),分别是:
1、 Android 系统原生dialog使用
2、 Android dialog Activity 使用
下面开始第三篇:相对复杂的自定义dialog。
一、转圈加载 dialog
见过大佬自己自定义的的 dialog ,也就是自己画出来的,额,楼主比较渣、楼主搞不了、我比较怂(一看就是有自知之明的好楼主)。但是呢,我还不服输,于是楼主用了偷懒的方法,废话不说,开干:
1、画个布局 即 layout.xml 文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/shape_wait_dialog"
android:gravity="center"
android:orientation="vertical"
android:padding="20dp">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/anim_dialog_wait" />
<TextView
android:id="@+id/tv_waitDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:singleLine="true"
tools:text="请稍等,拼命中..."
android:textColor="#1296DB"
android:textSize="14sp" />
</LinearLayout>
这里有一个图标:
对了,告诉各位一个很好的图标网站哈,不知道小伙伴一定要收藏,如果你家ui不在你可以自己去搞:
阿里妈妈 MUX
2、图片的旋转动画
在 drawable 文件夹下创建一个动画文件 当然了你也可以去 amin 文件夹下搞
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_wait_dialog"
android:pivotX="50%"
android:pivotY="50%" />
简单的动画没啥好说的
3、设置 dialog的小背景
在 drawable 文件夹下创建一个 shape 文件
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
<!--不同颜色不同效果哦-->
<solid android:color="#3c3c3c" />
</shape>
4、很关键的一步 设置 style
在 value/style.xml 文件下设置 我们的 dialog 的基本属性
<style name="loading_dialog_style" parent="@android:style/Theme.Dialog">
<!--提示框是否有边框-->
<item name="android:windowFrame">@null</item>
<!--是否为浮动窗口-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">false</item>
<!--去除title-->
<item name="android:windowNoTitle">true</item>
<!--窗口背景颜色-->
<item name="android:windowBackground">@drawable/shape_wait_dialog</item>
<!--是否允许对话框的背景变暗-->
<item name="android:backgroundDimEnabled">true</item>
<!--控制灰度值-->
<item name="android:backgroundDimAmount">0.4</item>
</style>
5、在使用
private Dialog myDialog;
/**
* 展示 dialog
*
* @param context 上下文
* @param waitContent 展示文字
* @param canCancel 是否点击 dialog 周围关闭,是否可以返回键关闭 true 表示可以, false 你懂得
*/
private void showMyWait(Context context, String waitContent, boolean canCancel) {
@SuppressLint("InflateParams") View view = LayoutInflater.from(this).inflate(R.layout.layout_wait_dialog, null);
TextView tvWaitDialog = view.findViewById(R.id.tv_waitDialog);
tvWaitDialog.setText(waitContent);
myDialog = new Dialog(context, R.style.loading_dialog_style);
myDialog.setCancelable(canCancel);
myDialog.setContentView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
myDialog.show();
}
/**
* 主动关闭 dialog
*/
private void cancelDialog() {
if (myDialog != null && myDialog.isShowing()) {
myDialog.cancel();
}
}
”