自定义的Dialog


看到项目切图上的要求的Dialog样式,我认为很简单,自定义一个布局就OK了,结果整了好几个小时……麻蛋

下面简单说下我的怎么做的

1、首先自定义 了一个Dialog

public class MyDialog extends Dialog {

   private Context context;
   private View view;

   public MyDialog(Context context) {
      super(context);
      this.context = context;
   }

   public MyDialog(Context context, int theme, View view) {
      super(context, theme);
      this.context = context;
      this.view = view;
   }

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      this.setContentView(view);
   }
}

2、设置了下主题--在Values文件夹的styles文件中添加:

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@drawable/dialog_bg</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

注意:windowBackground 的值是自己定义的一个形状shape,代码:

<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="20dp"></corners>     四周的圆角半径
    <solid android:color="@color/white"></solid>  填充颜色
</shape>

3、自定义了一个布局 名字为 Dialog_simple

<?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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            android:gravity="center"
            android:text="注册成功"
            android:textColor="#323232"
            android:textSize="25sp" />

        <TextView
            android:id="@id/content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_weight="2"
            android:gravity="center"
            android:textSize="18sp"
            android:textColor="#656565"
            android:text="请进行身份验证" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#d4d7d6"></View>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <Button
                android:id="@+id/left"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="@drawable/dialog_bg1"
                android:gravity="center"
                android:textSize="25sp"
                android:textColor="#007cfd"
                android:text="先看看" />

            <View
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android:background="#d4d7d6"></View>

            <Button
                android:id="@+id/right"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:textColor="#007cfd"
                android:background="@drawable/dialog_bg2"
                android:gravity="center"
                android:textSize="25sp"
                android:text="去认证" />
        </LinearLayout>

    </LinearLayout>
</RelativeLayout>

布局图如下:
 


大家看到我布局有两行标红的,设置两个按钮的背景,背景也是自定义的一个shape;
如下:
左边按钮左下角变圆:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:bottomLeftRadius="20dp" ></corners>
    <solid android:color="@color/white"></solid>
</shape>
右边按钮右下角变圆:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:bottomRightRadius="20dp" ></corners>
    <solid android:color="@color/white"></solid>
</shape>


注意:有的学生问在样式设置里已经把弹出的dialog框给设置过四个圆角了为何里面还要这设置,就这阻挠了一会……

不设置就这样:


下面两个角角不变圆,好吧,我就去内部单独去这两个角角变圆……
好了运行 如下如同下面出现的图啦~~~

4、然后书写弹出dialog的地方

public void showDialog1() {

    View view = LayoutInflater.from(this).inflate(R.layout.dialog_simple,null);

   Dialog dialog = new MyDialog(this,R.style.MyDialog,view);
    dialog.show();
    //屏幕 宽高
    int screenWith = UtilTools.getScreenWidth(this);
    int screenHeight = UtilTools.getScreenHeight(this);
    WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); // 获取对话框当前的参数值
    p.height = (int) (screenHeight * 0.3); // 高度设置为屏幕的0.6
    p.width = (int) (screenWith * 0.8); // 宽度设置为屏幕的0.65
    dialog.getWindow().setAttributes(p);
}

获取屏幕宽高的方法很多,项目中用的地方也挺多,写工具类,在这也给大家提供下:
/**
 * 获取屏幕宽度
 *
 * @param context
 * @return
 */
public static int getScreenWidth(Context context) {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics dm = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    return dm.widthPixels;
}

/**
 * 获取屏幕高度
 *
 * @param context
 * @return
 */
public static int getScreenHeight(Context context) {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics dm = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    return dm.heightPixels;
}


在这地方我没写设置dialog宽高的代码,即如上的黑体代码,结果



设置了以后就好多了…………

还像那么回事……哈

好多大神自定义了复杂的Dialog,也能完成这样,我这东西虽多点,但没一点的代码都不多,容易理解不是


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android自定义dialog是一种可以根据开发者的需求进行自定义的对话框。通过自定义dialog,开发者可以实现特定的界面设计和功能。根据引用,我们可以使用AlertDialog.Builder来创建一个普通的弹出框。而根据引用,我们可以通过简单的设置和技巧来实现Android自定义dialog。如果想要对话框具有自定义布局,可以创建一个布局文件,然后通过调用AlertDialog.Builder的setView()方法将其添加到对话框中。默认情况下,自定义布局会填充对话框窗口,但是仍然可以使用AlertDialog.Builder的其他方法来添加按钮和标题。此外,开发者还可以完全自定义一个Dialog,需要进行以下几步: 1. 定义一个style 2. 创建一个继承自Dialog的子类 3. 在子类中实现自定义布局和相关功能 4. 在应用中调用自定义dialog的实例来显示对话框。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [android之自定义Dialog](https://blog.csdn.net/weixin_41796401/article/details/96636408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Android自定义dialog简单实现方法](https://download.csdn.net/download/weixin_38736562/12800768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值