Android自定义对话框实现QQ退出界面

效果

首先看下qq的效果图,点击菜单按钮后点退出就会出现如图的对话框.

从上图可以看出,该对话框有一个圆角,以及标题,提示信息,两个按钮,按钮颜色是白色,按钮点击后背景会变成灰色,正常状态下对话框的背景色是白色.并且除了点击取消按钮和返回键外,点击屏幕其他区域该对话框不会小时.那么现在我们来实现一下这个对话框.我们实现后的效果如下图所示

实现

首先编写我们的背景,背景默认情况下是白色的,并且有一个圆角,使用shape实现

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle"
    >
    <corners
        android:bottomLeftRadius="15px"
        android:bottomRightRadius="15px"
        android:topLeftRadius="15px"
        android:topRightRadius="15px" />
    <solid android:color="@color/dialog_background"/>
</shape>

然后编写我们的布局文件,布局中主要就是两个TextView,两个Button,TextView主要用于显示标题,和提示信息,标题是居中显示的,科可以使用gravity和layout_gravity一起实现,Button就是看到的最下方的按钮,两个按钮宽度比重为1:1,这时候可以用layout_weight实现,然后按钮上方有一条1像素高的灰色的分割线,按钮之间也有1像素款的灰色的分割线,这个可以使用设置View的宽度和高度,再设置背景色即可,而按钮还有点击的效果,这个科一使用selector实现.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="320dp"
              android:layout_height="match_parent"
              android:layout_gravity="center"
              android:orientation="vertical"
              tools:context=".MainActivity">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="50dip"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="退出"
        android:textColor="@color/dialog_text"
        android:textSize="18sp"
        android:textStyle="bold"
        />

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="60sp"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:gravity="center_vertical"
        android:text="您确定要退出吗?"
        android:textColor="@color/dialog_text"
        android:textSize="16sp"
        />

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="@color/dialog_divider"

        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true">

        <Button
            android:id="@+id/dialog_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消"
            android:textColor="@color/dialog_btn"
            android:background="@drawable/dialog_left_btn_selector"
            />
        <View
            android:layout_width="1px"
            android:layout_height="match_parent"
            android:background="@color/dialog_divider"

            />

        <Button
            android:id="@+id/dialog_confirm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="确定"
            android:textColor="@color/dialog_btn"
            android:background="@drawable/dialog_right_btn_selector"
            />

    </LinearLayout>
</LinearLayout>

我们还要编写selector文件,分为两个,一个是左边的按钮的效果,一个是右边的按钮的效果,为什么要用两个呢,因为这两个按钮有一个角是圆角的,而圆角的位置不同,一个是左下角,一个是右下角,所以我们需要两个这样的文件,这里我们以左边的为例,右边的实现效果一样.

首先编写正常状态下的背景shape

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FFFFFF"/>
    <corners android:bottomLeftRadius="15px"/>

</shape> 

然后编写选中状态或者说获得焦点时的背景shape

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#EAEAEA"/>
    <corners android:bottomLeftRadius="15px"/>

</shape> 

最后编写selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/dialog_left_btn_pressed"/>
    <item android:state_focused="true" android:drawable="@drawable/dialog_left_btn_pressed"/>
    <item android:drawable="@drawable/dialog_left_btn"/>
</selector>

对于右边按钮的背景,只要将对应的left改成right即可,这里也不贴代码了.

此外,我们还要编写一个默认的style,我们要去除默认Dialog讨厌的标题,完全使用我们自己的布局,以及其他一些设置

    <style name="ExitDialog" 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">@drawable/dialog_bg</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

这时候,我们新建一个ExitDialog类继承Dialog类,在构造方法里调用我们编写的style,以及对context对象的赋值,重写onCreate方法,设置我们的布局

public class ExitDialog extends Dialog {
    private Context mContext;
    private Button mConfirm;
    private Button mCancel;
    public ExitDialog(Context context) {
        super(context,R.style.ExitDialog);
        mContext=context;
    }

    public ExitDialog(Context context, int theme) {
        super(context, theme);
        mContext=context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_dialog);
    }
}

而我们向让这个Diaglog点击对话框之外的区域不会消失,我们需要设置setCanceledOnTouchOutside(false).然后呢,我们需要设置点击事件,点击确定按钮会退出应用,点击取消当前对话框会消失

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_dialog);
        //设置为我们的布局
        this.setCanceledOnTouchOutside(false);
        //设置为点击对话框之外的区域对话框不消失
        mConfirm= (Button) findViewById(R.id.dialog_confirm);
        mCancel= (Button) findViewById(R.id.dialog_cancel);
        //设置事件
        mConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.exit(0);
            }
        });
        mCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ExitDialog.this.dismiss();
            }
        });

    }

使用

实现也很简单,之间将context对象传入构造一个ExitDialog对象,调用show方法显示即可

ExitDialog dialog=new ExitDialog(MainActivity.this);
dialog.show();

源码下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 02:40:30

Android自定义对话框实现QQ退出界面的相关文章

Android自己定义对话框实现QQ退出界面

效果 首先看下qq的效果图,点击菜单button后点退出就会出现如图的对话框. 从上图能够看出,该对话框有一个圆角,以及标题,提示信息,两个button,button颜色是白色,button点击后背景会变成灰色,正常状态下对话框的背景色是白色.而且除了点击取消button和返回键外,点击屏幕其它区域该对话框不会小时.那么如今我们来实现一下这个对话框.我们实现后的效果例如以下图所看到的 实现 首先编写我们的背景,背景默认情况下是白色的,而且有一个圆角,使用shape实现 <? xml versio

Android 自定义对话框,进度条,下拉刷新等

这个demo集合了自定义对话框,进度条,下拉刷新以及popup弹出框等.是学习了网上开源项目后,抽取集合了常用对话框,进度条,下拉刷新以及popup弹出框等.现在结构目录简单,更易于学习和扩展使用.注释都卸载代码.下面进行简单的介绍以及部分代码展示. 本文demo下载:点击 1.整体实现的效果图 2.项目结构图 这上面项目结构图也是一目了然,有什么功能展示.大家也看到了,这上面类有点多,如果全部贴出来,不大可能,有兴趣下载本文源码. 3.看看基础类BaseActivity 我就贴一下基础类,还有

android 自定义对话框

新建一个布局文件 my_dialog.xml <?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

Android自定义组件系列【13】——Android自定义对话框如此简单

在我们的日常项目中很多地方会用到对话框,但是Android系统为我们提供的对话框样子和我们精心设计的界面很不协调,在这种情况下我们想很自由的定义对话框,或者有的时候我们的对话框是一个图片,没有标题和按钮,例如这样的一系列需求,这一篇文章我们来给大家介绍一下如何像使用Activity一样来自定义我们的对话框. 一般自定义对话框有下面几种办法: 1.重写Dialog来实现. 2.获取Dialog的Window对象实现. 3.使用WindowManager来实现. 4.使用DialogTheme来实现

android 自定义scrollview 仿QQ空间效果 下拉伸缩顶部图片,上拉回弹 上拉滚动顶部title 颜色渐变

首先要知道  自定义scrollview 仿QQ效果 下拉伸缩放大顶部图片 的原理是监听ontouch事件,在MotionEvent.ACTION_MOVE事件时候,使用不同倍数的系数,重置布局位置[注此处是伸缩隐藏,不是同比例放大] inner.layout(normal.left, (int) (normal.top + inner_move_H), normal.right, (int) (normal.bottom + inner_move_H)); 关于“自定义scrollview 仿

android自定义对话框

2015-04-02 18:27:02 有的时候安卓内置的对话框不能满足我们的需要,或许是功能不齐全亦或者不符合我们的界面设计要求,这个时候我们就需要弄一个我们自己设置的对话框了,下面我将为大家讲一种很简单的方法创建自己的对话框. 首先创建一个style 即:<style name="你自己命名" parent="@android:Theme.Dialog">.......</style>这个相信大家都懂的. 接着创建你自己的对话框布局:自己

Android—简单的仿QQ聊天界面

最近仿照QQ聊天做了一个类似界面,先看下界面组成(画面不太美凑合凑合呗,,,,): 其中聊天背景可以是一个LinearLayout或者RelativeLayout里面存放的是ListView(将ListView的分割线设置成透明:android:divider="#0000"否则聊天界面会显示出分割线,,,想想都屌,,,) 于是,我要上主界面的xml布局文件了: <?xml version="1.0" encoding="utf-8"?&g

android:自定义HorizontalScrollView实现qq侧滑菜单

今天看了鸿洋_大神在慕课网讲的qq5.0侧滑菜单.学了不少的知识,同时也佩服鸿洋_大神思路的清晰. 看了教程课下也自己实现了一下.代码几乎完全相同  别喷我啊..没办法 o(︶︿︶)o 唉 像素不好 没办法 找不到好的制作gif的软件. 我们暂且称侧滑左边界面的为menu,右边为content 首先是menu的布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:androi

Android自定义对话框(Dialog)位置,大小

代码: package angel.devil; import android.app.Activity;import android.app.Dialog;import android.os.Bundle;import android.view.Gravity;import android.view.Window;import android.view.WindowManager; public class DialogDemoActivity extends Activity { /** C