推荐:
日常工作中,自己定义了 Dialog 的工具类,以便使用,下面从屏幕中间弹出的 Dialog,效果图如下:
下面主要讲的是:
- 自定义 Dialog 工具类
- 自定义布局文件
- 自定义 Dialog 显示风格
- 显示/关闭 Dialog(使用自定义 dialog)
1.自定义 Dialog 工具类
定义一个名字为 DialogUtil 的工具类,代码如下:
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
/**
* author: wu
* date: on 2018/7/5.
* describe:自定义dialog工具类
*/
public class DialogUtil {
private Dialog dialog;
private View inflate;
//中间显示的dialog
public void showCentreDialog(Context context) {
//自定义dialog显示布局
inflate = LayoutInflater.from(context).inflate(R.layout.dialog_centre, null);
//自定义dialog显示风格
dialog = new Dialog(context, R.style.DialogCentre);
//点击其他区域消失
dialog.setCanceledOnTouchOutside(true);
dialog.setContentView(inflate);
Window window = dialog.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.CENTER;
wlp.width = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(wlp);
dialog.show();
}
//关闭dialog时调用
public void close() {
if (dialog != null) {
dialog.dismiss();
dialog = null;
}
}
}
2.自定义布局文件
定义一个名字为 dialog_centre 的布局文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000">
<LinearLayout
android:layout_width="260dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerInParent="true"
android:background="#FFFFFF">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="66dp"
android:layout_height="66dp"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="23dp"
android:background="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_icon"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:text="少林寺"
android:layout_marginLeft="23dp"
android:layout_marginRight="23dp"
android:layout_marginTop="5dp"
android:ellipsize="end"
android:gravity="center"
android:maxEms="10"
android:singleLine="true"
android:textColor="#FFFFAA00"
android:textSize="15sp" />
<TextView
android:id="@+id/tvUID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tvName"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginBottom="6dp"
android:layout_marginTop="1.3dp"
android:text="UID:00000"
android:textSize="12sp" />
<TextView
android:id="@+id/tvMargin"
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="#00000000" />
</RelativeLayout>
<TextView
android:id="@+id/tv_fengexian"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginTop="1dp"
android:background="#FFDDDDDD"/>
<LinearLayout
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="45dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tvSendMSG"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="发消息"
android:textColor="#FF333333"
android:textSize="12sp" />
<TextView
android:id="@+id/tvHome"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="主页"
android:textColor="#FF333333"
android:textSize="12sp" />
<TextView
android:id="@+id/tvAdd"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="+关注"
android:textColor="#FFFFAA00"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
3.自定义 Dialog 显示风格
在 styles 文件中自定义一个名字为 DialogCentre 的风格,代码如下:
<!--位于中间dialog的风格-->
<style name="DialogCentre">
<!--设置dialog的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--设置Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!--设置无标题-->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置窗口内容不覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--设置动画,在这里使用让它继承系统的Animation.Dialog-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
</style>
4.显示/关闭 Dialog
在 Activity 中添加如下代码即可:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DialogUtil dialogUtil = new DialogUtil();
//显示位于中间的dialog
dialogUtil.showCentreDialog(this);
//关闭dialog时调用
// dialogUtil.close();
}
}
推荐: