(十)android项目中,通用布局的对话框的实现。

在工作中,我们的APP项目中经常需要用到dialog,一般设计师对于一个APP项目,会设计使用同一个风格,显示不同内容的对话框,所以为了提高开发的效率,我们可以针对一个项目设计一个通用的对话框,所有用到的地方都可以调用。本文针对下面效果的对话框,实现了一个通用对话框,具体实现核心代码如下所示。

1 CustomDialog.java代码实现如下所示:

import android.app.ActionBar.LayoutParams;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.CheckBox;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 类说明:
 *
 * @author fuyanan
 * @date 2015-9-1
 * @version 1.0.0
 */
public class CustomDialog extends Dialog {

    private TextView custom_dialog_tv_title;
    private TextView custom_dialog_tv_message;
    private RelativeLayout custom_dialog_rl_tip;
    private CheckBox custom_dialog_cb;
    private TextView custom_dialog_tv_tip;
    private TextView custom_dialog_tv_cancel;
    private TextView custom_dialog_tv_confirm;

    public CustomDialog(Context context, int theme) {
        super(context, theme);
        initView();
    }

    public CustomDialog(Context context) {
        this(context, R.style.CustomDialog);
    }

    private void initView() {
        setContentView(R.layout.custom_dialog);
        custom_dialog_tv_title = (TextView) findViewById(R.id.custom_dialog_tv_title);
        custom_dialog_tv_message = (TextView) findViewById(R.id.custom_dialog_tv_message);
        custom_dialog_rl_tip = (RelativeLayout) findViewById(R.id.custom_dialog_rl_tip);
        custom_dialog_cb = (CheckBox) findViewById(R.id.custom_dialog_cb);
        custom_dialog_tv_tip = (TextView) findViewById(R.id.custom_dialog_tv_tip);
        custom_dialog_tv_cancel = (TextView) findViewById(R.id.custom_dialog_tv_cancel);
        custom_dialog_tv_confirm = (TextView) findViewById(R.id.custom_dialog_tv_confirm);
    }

    public void setDialogTitle(int visibility) {
        custom_dialog_tv_title.setVisibility(visibility);
    }

    public void setDialogTitle(int visibility, String title) {
        custom_dialog_tv_title.setVisibility(visibility);
        if (visibility == View.VISIBLE) {
            custom_dialog_tv_title.setText(title);
        }
    }

    public void setDialogMessage(String message) {
        custom_dialog_tv_message.setText(message);
    }

    public void setDialogTip(int visibility) {
        custom_dialog_rl_tip.setVisibility(visibility);
    }

    public void setDialogTip(int visibility, String tip,
            OnCheckedChangeListener listener) {
        custom_dialog_rl_tip.setVisibility(visibility);
        if (View.VISIBLE == visibility) {
            custom_dialog_cb.setOnCheckedChangeListener(listener);
            custom_dialog_tv_tip.setText(tip);
        }
    }

    public void setCheckBox(boolean checked) {
        custom_dialog_cb.setChecked(checked);
    }

    public boolean isDialogCheckBoxChecked() {
        return custom_dialog_cb.isChecked();
    }

    public void setDialogCancel(int visibility) {
        custom_dialog_tv_cancel.setVisibility(visibility);
    }

    public void setDialogCancel(int visibility, String text,
            android.view.View.OnClickListener listener) {
        custom_dialog_tv_cancel.setVisibility(visibility);
        if (visibility == View.VISIBLE) {
            custom_dialog_tv_cancel.setText(text);
            custom_dialog_tv_cancel.setOnClickListener(listener);
        }
    }

    public void setDialogConfirm(int visibility) {
        custom_dialog_tv_confirm.setVisibility(visibility);
    }

    public void setDialogConfirm(int visibility, String text,
            android.view.View.OnClickListener listener) {
        custom_dialog_tv_confirm.setVisibility(visibility);
        if (visibility == View.VISIBLE) {
            custom_dialog_tv_confirm.setText(text);
            custom_dialog_tv_confirm.setOnClickListener(listener);
        }
    }

    @Override
    public void show() {
        // TODO Auto-generated method stub
        super.show();
        Window dialogWindow = this.getWindow();
        dialogWindow.setGravity(Gravity.CENTER);
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        lp.width = LayoutParams.WRAP_CONTENT;
        lp.height = LayoutParams.WRAP_CONTENT;
        dialogWindow.setAttributes(lp);
    }
}

2、custom_dialog.xml中的代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/custom_dialog_rl_width"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/common_custom_dialog_bg"
    android:paddingBottom="@dimen/custom_dialog_rl_padding_botton"
    android:paddingLeft="@dimen/custom_dialog_rl_padding_left"
    android:paddingRight="@dimen/custom_dialog_rl_padding_right" >

    <TextView
        android:id="@+id/custom_dialog_tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/custom_dialog_margin_top"
        android:text="标题"
        android:textColor="@color/custom_dialog_tv_color1"
        android:textSize="@dimen/custom_dialog_tv_text_size1" />

    <TextView
        android:id="@+id/custom_dialog_tv_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/custom_dialog_tv_title"
        android:layout_marginTop="@dimen/custom_dialog_margin_top"
        android:text="内容,提示用户的信息"
        android:textColor="@color/custom_dialog_tv_color2"
        android:textSize="@dimen/custom_dialog_tv_text_size3" />

    <RelativeLayout
        android:id="@+id/custom_dialog_rl_tip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/custom_dialog_tv_message"
        android:layout_marginTop="@dimen/custom_dialog_margin_top"
        >

        <CheckBox
            android:id="@+id/custom_dialog_cb"
            style="@style/CustomDialogCheckBoxTheme"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:checked="true" />

        <TextView
            android:id="@+id/custom_dialog_tv_tip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="8dp"
            android:layout_toRightOf="@id/custom_dialog_cb"
            android:text="下次不提示"
            android:textColor="@color/custom_dialog_tv_color2"
            android:textSize="@dimen/custom_dialog_tv_text_size2" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/custom_dialog_rl_select"
        android:layout_width="wrap_content"
        android:layout_height="36dp"
        android:layout_alignParentRight="true"
        android:layout_below="@id/custom_dialog_rl_tip"
        android:layout_marginTop="@dimen/custom_dialog_margin_top" >

        <TextView
            android:id="@+id/custom_dialog_tv_cancel"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:background="@drawable/common_custom_dialog_btn_selector"
            android:gravity="center_vertical"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:text="确定"
            android:textColor="@color/custom_dialog_text_bg_color_selector"
            android:textSize="@dimen/custom_dialog_tv_text_size3" />

        <TextView
            android:id="@+id/custom_dialog_tv_confirm"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@id/custom_dialog_tv_cancel"
            android:background="@drawable/common_custom_dialog_btn_selector"
            android:gravity="center_vertical"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:text="取消"
            android:textColor="@color/custom_dialog_text_bg_color_selector"
            android:textSize="@dimen/custom_dialog_tv_text_size3" />
    </RelativeLayout>

</RelativeLayout>

3、styles.xml中的CustomDialog样式代码如下所示:

 <style name="CustomDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.5</item>
  </style>
时间: 2024-11-07 04:44:49

(十)android项目中,通用布局的对话框的实现。的相关文章

Android项目中使用类似菊花的Dialog

Android项目中使用类似菊花的Dialog 效果图一: 项目中使用的效果图二: 1.首先定义动画文件 <?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/loading2"

Android项目中自定义顶部标题栏

Android项目中自定义顶部标题栏 下面给大家详细介绍android中自定义顶部标题栏的思路及实现方式 先来图:     思路及实现步骤 1.定义标题栏布局 2.自定义TitleActivity控制标题栏按钮监听 3.在TitleActivity中实现标题栏以下内容切换 首先定义标题栏 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http:/

在android项目中使用FontAwesome字体

在android项目中使用FontAweSome图标集,可以方便的适配各种屏幕分辨率,不必在各种不同分辨率文件夹中新建资源文件.使用字体是一种很巧妙的方法,把图像以字体的方式呈现,这样以前设置为android:background的属性,现在只需要设置android:text就可一搞定,而且还可一适配不同的分辨率. 在XML文件中设置字体时,只需要指定android:typeface属性即可,但是 这个值只支持系统内置的几种字体. 导入FontAwesome字体,需要在项目中导入第三方字体.方式

Android 项目中文件夹的说明与作用(转)

(转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. 2. gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3. assets:可以存放项目一些较大的资源文件,例如:图片.音乐.字体等. 4. res:可以存放项目中所有的资源文件,例如:图片(*.png.*.jpg).文本等. 5. res\drawable

android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

1.下载工具 xstream 下载最新版本地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/ 下载完成后 把jar包导入到自己的android项目中 2.asset 文件夹 下的 aa.xml 文件 <?xml version="1.0" encoding="UTF-8"?><product>    <name>

Android第4坑:Android项目中使用lambda表达式

Android项目中使用lambda表达式或Java8新特性,需要在app/build.gradle中添加如下配置 android { ... defaultConfig { ... jackOptions.enabled = true } compileOptions{ sourceCompatibility org.gradle.api.JavaVersion.VERSION_1_8 targetCompatibility org.gradle.api.JavaVersion.VERSION

Android 项目中执行java的main方法

Android 项目中执行java的main方法 导语 今日,在android项目中写了一个工具类,为了简单测试一下输出,就只直接在类中加上了main方法,于是问题来了: 解决方法是网上找到了,已经解决了,在此记录一下. 右击项目名,调出Properties窗口,打开Run/Debug Settings 标签,右边即列出了这个项目中含有main方法的所有java类,双击你要允许的java类:

Android项目中gen文件下R文件无法生成的解决的方法

帮一个网友解决R文件无法生成的问题,搜集了些材料特整理例如以下,刚開始学习的人參考他人代码时极易出现此种问题,一般都是xml文件出错,无法被正确解析. gen文件夹无法更新,或者gen文件夹下的R.JAVA文件无法生成 1.gen文件夹的用处 android gen文件夹下的R.java并非由用户创建,而是androidproject本身将android的资源进行自己主动"编号"(ID)值. 2.gen文件夹下R文件无法更新/生成的原因 1)res文件夹下的layout下的xml文件名

Android项目中的R文件丢失

Android项目中的R文件丢失恢复的方法如下: (1).修改xml文件命名中的大写字母 (2).选中项目,点击 Project - Clean , 清理一下项目: (3).从别的工程中拷贝一份R文件过来,然后string.xml里随便改动一下,也可更新R文件. (4).右击你的工程(项目)-->Properties-->Android --> 选择相应的target 然后 点击 apply 即可.

Android项目中JNI技术生成并调用.so动态库实现详解

生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配置SWIG环境,有点麻烦了,所以往往大家不采用这个途径,参照博文http://my.oschina.net/liusicong/blog/314162. 第二种方式:javah的方式则通过shell指令就可以完成整个流程,该过程大概包括以下步骤: 编写 Java 代码.我们将从编写 Java 类开始