• Android自定义Dialog及其布局


     实际项目开发中默认的Dialog样式无法满足需求,需要自定义Dialog及其布局,并响应布局中控件的事件。

    上效果图:

    自定义Dialog,LogoutDialog:

    要将自定义布局传入构造函数中,才能在Activity中通过 dialog.findviewbyid 获取到控件,否则返回null。

    public class LogoutDialog extends Dialog{
      Context context;
      public LogoutDialog(Context context) {
      super(context);
      this.context=context;
      this.setContentView(R.layout.logout_dialog);
      }
    
      public LogoutDialog(Context context, int theme){
      super(context, theme);
      this.context = context;
      this.setContentView(R.layout.logout_dialog);
      }
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //this.setContentView(R.layout.logout_dialog);
      }
    }

    自定义布局文件,logout_dialog.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@android:color/transparent"
    >
    
      <LinearLayout 
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/dialog_top_bg"
      android:orientation="vertical"
      android:paddingTop="10dp"
      >
        <ImageView 
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/pop_icon1"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="10dp"
        />
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="是否确认注销账号"
        android:layout_gravity="center_horizontal" 
        android:layout_marginBottom="20dp"
        android:textColor="#FF3C25"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        />
      </LinearLayout>
      <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:background="@drawable/dialog_buttom_bg"
        >
        <TextView 
        android:id="@+id/back_btn_dialog"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="返回"
        android:layout_weight="1"
        android:textColor="#FFFFFF"
        android:gravity="center"
        />
        <TextView 
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="|"
        android:textColor="#C9CACC"
        android:gravity="center"
        />
        <TextView 
        android:id="@+id/submit_btn_dialog"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="确定"
        android:layout_weight="1"
        android:textColor="#FFFFFF"
        android:gravity="center"
        />
      </LinearLayout>
    
    </LinearLayout>

    两个Shape的布局,dialog_buttom_bg.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    >
      <corners 
      android:bottomLeftRadius="@dimen/dialog_corners"
      android:bottomRightRadius="@dimen/dialog_corners"
      />
      <gradient 
      android:startColor="#FF3E25"
      android:endColor="#FF3E25"
      android:centerColor="#FF3E25"
      android:angle="270"
      />
    </shape>

    dialog_top_bg.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
      <corners 
      android:topLeftRadius="@dimen/dialog_corners"
      android:topRightRadius="@dimen/dialog_corners"
      />
      <gradient 
      android:startColor="#ffffff"
      android:endColor="#ffffff"
      android:centerColor="#ffffff"
      android:angle="270"
      />
    </shape>

    自定义样式Style,来改变默认的Dialog样式。在values/styles.xml下新加样式:

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

     在Activity中调用:

    Dialog dialog==new LogoutDialog(TempActivity.this, R.style.UpdateErrorFinishDialog);
    
    dialog.setCanceledOnTouchOutside(false);
    dialog.show();
    
    TextView submit_btn_dialog=(TextView) dialog.findViewById(R.id.submit_btn_dialog);
    TextView back_btn_dialog=(TextView) dialog.findViewById(R.id.back_btn_dialog);
    submit_btn_dialog.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //Toaster.showLongToast("确定");
        dialog.dismiss();
      }
    });
    back_btn_dialog.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //Toaster.showLongToast("返回");
        dialog.dismiss();
      }
    });
  • 相关阅读:
    类加载机制深度解析
    Mysql索引数据结构详解(1)
    深入理解mysql锁与事务隔离级别
    关于redis HSCAN count参数不生效的问题
    在idea的java开发中字符串length()方法获取长度与赋值不符的问题
    在网页中使用超链接来打开本地应用(可传参数)
    断言(assert)简介
    9. Palindrome Number
    四、MapReduce
    三、HDFS——Hadoop分布式文件系统
  • 原文地址:https://www.cnblogs.com/Joanna-Yan/p/4438725.html
Copyright © 2020-2023  润新知