• 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();
      }
    });
  • 相关阅读:
    json的eval的小问题
    关于insertBefore
    关于touch-action
    关于 please verify the preference field with the prompt:Tomcat JDK name 问题解决
    总结一下,以软件开发生命周期来说明不同的测试的使用情况
    用户需求、己、竞争对手的关系
    苹果电脑快捷键大全
    软件工程与计算机科学的区别
    有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?
    Maven 和IDEA的初始配置
  • 原文地址:https://www.cnblogs.com/Joanna-Yan/p/4438725.html
Copyright © 2020-2023  润新知