自定义的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,也能完成这样,我这东西虽多点,但没一点的代码都不多,容易理解不是


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值