Android 实现对话框圆角功能

Android 实现自定义dialog圆角功能

刚接触公司的Android项目,客户画好了界面,需求如下:

弹出的窗口是要四个圆角,并且标题栏颜色和下方不一样,还要以蓝色线分隔开,通过网上各种百度,给出的方案基本上是在/drawable文件夹下建立一个shape文件,里面对控件进行一些控制。(这里要注意的是shape文件应该是放在drawable文件夹下,至于为什么要放到这里,以及根元素下的各种元素用法,请参考这位前辈的博客:http://blog.csdn.net/lonelyroamer/article/details/8254592讲解的非常详细)。

关键点就在于shape提供了很多元素用来控制颜色、圆角(四个方向都可以控制半径大小)。既然要用到圆角的弹出窗口,我们就得用以下的元素corners来控制,工程目录为:F:\PopwindowOnLeft1\app\src\main\res\drawable-mdpi\shapeyuanjiao3.xml:

<?xml version="1.0" encoding="UTF-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="rectangle" >

<!-- 填充的颜色 -->

<solid android:color="#0000FF" />

    <!-- 设置按钮的四个角为弧形 -->

<!-- android:radius 弧形的半径 -->

<corners android:topLeftRadius="@dimen/RoundedAmplitude" android:topRightRadius="@dimen/RoundedAmplitude"/>

<gradient

android:angle="270"

android:centerColor="#0000FF"

android:endColor="#0000FF"

android:startColor="#0000FF" />

</shape>

上述代码中corner可以设置上面和下面的两个角,不设置的话默认是半径为0,这一点大家可以上机测试。

设置好了圆角尺寸之后,就要在布局文件里面使用,使用其实非常简单,通过Layout、view、textview等的android:background="@drawable/shapeyuanjiao3"属性,设置尺寸、圆角(可以定制单独显示哪个角需要圆角)。

好了,进入实际需求来吧,为了显示初步的布局,我用了一个相对布局,文件如下:

<?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">

<com.pop.main.ClipImageView  android:layout_width="match_parent" android:layout_height="match_parent"

android:id="@+id/front_image"/>

<ImageView android:layout_width="match_parent" android:layout_height="match_parent"

android:background="#33000000"/>

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"

android:layout_marginLeft="60dp"

android:layout_marginRight="60dp"

android:orientation="vertical" android:layout_centerInParent="true"

android:background="@drawable/shapeyuanjiao">

<TextView android:layout_width="match_parent" android:layout_height="30dip"

android:background="@drawable/shapeyuanjiao3"

android:text="保證金狀態"

android:gravity="center"

android:textColor="@color/white" />

<View  android:layout_height="1dip"

android:layout_width="match_parent"

android:background="@color/blue" /><!-- 实现分隔线的显示-->

<TextView android:layout_width="match_parent"

android:layout_height="30dip"

android:text="賬號09102"

android:textColor="@color/black"/>

<TextView android:layout_width="match_parent" android:layout_height="30dip"

android:text="浮動損益"

android:textColor="@color/black"/>

</LinearLayout>

</RelativeLayout>

请注意 <TextView android:layout_width="match_parent" android:layout_height="30dip"

android:background="@drawable/shapeyuanjiao3"

android:text="保證金狀態"

android:gravity="center"

android:textColor="@color/white" />

<View  android:layout_height="1dip"

android:layout_width="match_parent"

android:background="@color/blue" />

这段代码就是关键所在,textview为dialog的表头,单独设置成蓝色的。整体的dialog窗口需要设置成灰色的,所以需要另外一个shape文件,两个文件只是在圆角的显示个数和颜色上面有一点差异,大家可以稍作修改就可以看到效果。下列是整个dialog的设置情况:

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"

android:layout_marginLeft="60dp"

android:layout_marginRight="60dp"

android:orientation="vertical" android:layout_centerInParent="true"

android:background="@drawable/shapeyuanjiao">

实际运行结果如下图:

界面有点丑,莫见怪。其实在做的过程当中,走了很多弯路,我列出来吧,给遇到同样问题的人提供一些经验,技术不够的地方请批评指正。

弯路一:

从网上找了另外一种设置dialog为圆角的方式,也是通过shape文件来设置,但方法有点曲折,是通过给整个dialog外层另外增加一层圆角,这里会看到整个窗口像是被包在一起,效果很不理想,shape文件如下:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<solid android:color="#0033FF" />

//设置边距,实现圆角功能

<padding

android:bottom="4dp"

android:left="4dp"

android:right="4dp"

android:top="4dp" />

//控制边界线颜色和笔触大小

<stroke

android:width="1dp"

android:color="#CdCdCd" />

//控制界面颜色渐变(你这个用不到)

<gradient

android:startColor="#E9E9E9"

android:endColor="#FFFFFF"

android:type="linear"

android:angle="90"/>

//控制圆角大小

<corners android:radius="10dp" />

</shape>

注意这段代码:

//设置边距,实现圆角功能

<padding

android:bottom="4dp"

android:left="4dp"

android:right="4dp"

android:top="4dp" />这个方式有点不太符合客户的要求,有需要的朋友可以参考一下,我运行的结果如下:

弯路2:

在布局文件中,一开始我是这样考虑的,既然标题的颜色和下列显示的不太一样,我就用android:background="@color/blue"这样设置,然后外围的LineLayout设置android:background="@drawable/shapeyuanjiao3"但是发现,运行之后,是没有圆角效果的,咨询了公司同事才发现,虽然设置了整个的Layout的shape圆角效果,但给每一行的imageview设置background的时候,就会覆盖外围的样式,导致显示不出来,解决方案就是每个单独的imageview不用设置颜色,给标题蓝色单独再用另外一个shape设置成蓝色的就可以了。

有些地方说的不太明白,可以问我,这个小demo可以从这里下载,欢迎下载。

http://download.csdn.net/detail/omayyouhappy/8888251是免费的,可以给新手一些建议。还有这个代码还是先了背景图片模糊的功能,具体可以参考我下一篇博客:关于Android背景图片模糊的解决方案?

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

时间: 2024-11-06 11:42:48

Android 实现对话框圆角功能的相关文章

android 时间对话框 TimePickerDialog详细介绍

 个人在做提醒功能的时候用到了TimePickerDialog对话框,查阅了很多技术资料,但是感觉很多东西都说的不是很详细,并且很多地方,都有不完善的地方,比如有弹出对话框得到的不是系统当前的时间,而是一个其他时间的现象,让人很是苦闷.所以在经过几度研究之后,决定把个人对此空间的部分理解拿出来与大家讨论,如有不对之处,敬请谅解,会加以改进. 闲话不多说,直接进入主题: 首先,我们要在程序中声明一个日历的对象,并对其实例化获取日历实例,后面会用到. private Calendar c = C

Android日期对话框NumberPicker的用法教程

NumberPicker是Android3.0之后引入的一个控件,NumberPicker 是用于选择一组预定义好数字的控件.比如时间hour的选择只有0-23有效,则可以通过setMinValue和setMaxValue设定. 使用该控件时需注意他的两个listener和一个formatter:一个listener用于监听当前value的变化:一个listener用于监听该控件的scroll状态:formatter用于格式化显示该控件中的value.下面逐一介绍这几个接口: 1.NumberP

Android FlycoDialog 简单实用的自定义Android弹窗对话框之Dialog篇

效果图镇楼   FlycoDialog是一款非常棒的弹窗对话框处理框架,今天在这里主要讲一下他的自定义弹出对话框的功能,这里以第二幅效果图为例,图片已经放在博客最下方,X号自己随便找一个东西代替吧. 首先我们还是先添加依赖. compile 'com.flyco.dialog:FlycoDialog_Lib:[email protected]' 然后我们先写一个弹窗的布局,非常简单一个大的ImageView展示图片,上面放一个小的ImageView用于点击使弹框消失. <?xml version

加载loading对话框的功能(不退出沉浸式效果)

上一篇基于修改系统源码的前提下,实现了完全的沉浸式体验效果.可参考这篇 戳这 一.自定义Dialog 在沉浸式效果下,当界面弹出对话框时,对话框将获取到焦点,这将导致界面退出沉浸式效果,那么是不是能通过屏蔽对话框获取焦点来达到不退出沉浸式的目的呢.说干就干,我们先来看一下改善后的效果图. 普通对话框弹出效果 LoadingDialog弹出效果 自定义LoadingDialog public class LoadingDialog extends Dialog { public LoadingDi

Android实现换肤功能(一)

上周有个朋友给建议说讲讲换肤吧,真巧这周公司的工作安排也有这个需求,换的地方之多之繁,让人伤神死了.正所谓磨刀不误砍柴工,先磨下刀,抽出一个工具类,写了个关于换肤的简单demo. Android中换肤的实现有几种方法,我使用的是读取共享进程空间另一apk中的资源的方法.大致的原理如下,让你的app和一个只有资源文件的app运行在同一进程中,这样你的app就可以访问另一app的资源了.原理很简单,下面我们分步骤讲解实现过程. 一.共享进程运行的空间 通过在两个工程下的manifest根节点添加相同

【转】为Android应用添加搜索功能

为Android应用添加搜索功能 为Android应用增加搜索功能:增加搜索建议

Android 自定义UI圆角按钮

Android实际开发中我们一般需要圆角的按钮,一般情况下我们可以让美工做出来相应的按钮图片,然后放上去即可,另外我们可以在布局文件中直接设置,也可以达到一样的效果.下面讲解在布局文件中自定义圆角按钮的小Demo. 代码很简单,实现效果图: 源代码: 源代码: 这里主要是xml布局文件实现: MainActivity: package com.android_drawableresource; import android.app.Activity; import android.os.Bund

Eclipse Android 代码自动提示功能 (转)

Eclipse Android 代码自动提示功能 1.设置 java 文件的代码提示功能 打 开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist > Auto activation triggers for Java ,设置框中默认是一个点, 现在将它改为: 以下为引用内容:  .abcdefghijklmnopqrstuvwxyz(,    2.设置 xml 文件的代码提示功能 打 开 Ecli

Android实现换肤功能(二)

前两天写的上章关于换肤的功能获得了很好的反响,今天为大家介绍另一种方式.今天实现的策略也是网友建议的,然后我自己去写了个demo,大家自己评估下相比第一种方式的优势和劣势在哪里. 简单介绍下关于第一种关于换肤实现的方法一些不友好的地方,比如点击了换肤的功能键,需要先下载一个资源apk,然后再去引用其中的资源ID,于用户使用起来确实有有很多不便之处.今天为大家介绍的方法是克服了这一弊端的,可以实现直接在应用内切换,把资源文件存储在本地apk的,读取和操作也是更加便捷的,下面介绍下大致的一个实现逻辑