从屏幕中间弹出的Dialog

推荐:

日常工作中,自己定义了 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();
    }
}

推荐:

猜你喜欢

转载自blog.csdn.net/wuqingsen1/article/details/83214567