android 多个按钮排列,Android开发消除横向排列的多个Button之间的空隙

一.问题重述

摘要里描述的可能不太清楚,问题如下图:

ca69d811c199a33a41dc49697708ca50.png

如何消除Button1和Button2之间的空隙,以及Button与左右边界之间的空隙?

二.问题根源

这里出现的空隙其实是Button的背景图片中的透明部分,如下图:(两个按钮被同时按下)

cba8ff4b800ffaf669722799ac295779.png

因为间隙是Button自身的一部分,所以设置margin和padding为0也无法消除(至于把margin设置为负值,额,这算解决方案吗?)

三.解决方案及验证

设置Button的style属性:

bb76f560818a2b021f4e49f35736226b.png(初始)

fc4aaa5d8ba7d4b9c65beb28f961836e.png(两个按钮都被按下)

方案1的效果:可以消除间隙,并且不影响按钮默认的点击效果(背景变蓝)

设置Button的style为自定义style(或者直接设置Button的background属性为自定义图片):

@drawable/whitecolor

0dp

center

abb3e9f616a3592145a12cb033485d40.png(初始/按下)

方案2的效果:可以消除间隙,但按钮默认的点击效果没了

设置Button的background为透明色:

android:background="#00000000"

43fbc9626fa251345cd56d5aee5f0b88.png(初始/按下)

方案3的效果:可以消除间隙,但按钮默认的点击效果没了(和方案2效果一样)

把LinearLayout换为TableLayout:

android:stretchColumns="*"

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_column="0"

android:text=" Button1" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_column="1"

android:text=" Button2" />

257957f6545c47b166eb8e605df10750.png

方案4的效果:无法消除间隙

自定义selector作为Button背景:

android:state_pressed="true">

android:background="@drawable/bg_btn"

5e9599894b8342c1e6323666630f922e.png(左边按钮被按下)

方案5的效果:可以消除间隙,并且不影响按钮的默认点击效果(和方案1的效果类似,比方案1更好一些,可以自定义按钮背景)

四.总结

消除按钮间隙的关键在于改background属性,用边框不含透明色的图片作为按钮的背景即可消除间隙

消除按钮间隙建议使用方案5:自定义selector作为按钮背景图片

Android开发8:UI组件TextView,EditText,Button

版本:Android4.3 API18 学习整理:liuxinming TextView 概述 TextView直接继承了View(EditText.Button两个UI组件类的父类) TextVie ...

Android开发-之五大布局

在html中大家都知道布局是什么意思了,简单来说就是将页面划分模块,比如html中的div.table等.那么Android中也是这样的.Android五大布局让界面更加美化,开发起来也更加方便.当然 ...

Android开发1:基本UI界面设计——布局和组件

前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望 ...

Android开发自学笔记(Android Studio)—4.1布局组件

一.引言 Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.在Android4.0之前,我们通常说 ...

【Android开发学习笔记】【第八课】五大布局-下

概念 五大布局上一篇文章已经介绍了 LinearLayout RelativeLayout 这一篇我们介绍剩下的三种布局 FrameLayout 五种布局中最佳单的一种布局.在这个布局在整个界面被当成 ...

Android开发 - 掌握ConstraintLayout(六)链条(Chains)

本文我们介绍链条(Chains),使用它可以将多个View连接起来,互相约束. 可以创建横向的链条,也可以创建纵向的链条,我们以横向的链条举例: 我们先创建三个按钮: 我们选中三个按钮后在上面点右键创 ...

android开发分辨率适配总结

重要概念 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 什么是dp.dip.dpi.sp.px?他们之间的关系是什么? 什么是mdpi.hdpi.xdpi.xxdpi?如何计算和区分? 在下面的内容中我 ...

Android开发——LinearLayout和RelativeLayout的性能对比

0. 前言 我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\ ...

Android开发之自定义的ListView(UITableViewController)

Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...

随机推荐

C# 读写App.config

Jul142013 [C#] 读写App.config配置文件的方法 作者:xieyc   发布:2013-07-14 17:29   字符数:3433   分类:编程   阅读: 39,139 次 ...

System占用端口80

可尝试如下结束System进程: 开始——设置——控制面板——管理工具——服务结束系统服务项:World Wide Web Publishing Service

SVN更改用户名和密码

关于SVN更换用户名和密码的问题,SVN是一个脚本的扩展软件,但是通过客户端更改用户名和密码的时候比较弱智,必须要经过一些操作之后才能出现更改用户名和密码的对话框. 主要的步骤就是“点击鼠标右键选择T ...

PHP_零基础学php_2变量、预定义变量、预定义常量、表达式、运算符、程序控制流程

1.变量 PHP中使用$后跟变量名表示一个变量,变量名区分大小写. 变量的数据类型 整数类型 浮点类型 字符串类型 布尔类型 数组类型 对象

&lt ...

hdu1024

#include #include const int MAX = 1000005; using namespace std; int nu ...

iOS NSString 文本不同的颜色 标题+文本字体大小 行间距/删除不需要的字符 /以及自适应高度

#import @interface TextsForRow : NSObject @property(nonatomic,copy)N ...

UIElementImageShot

MemoryStream memStream = new MemoryStream(); System.Windows.Media.Imaging.RenderTargetBitmap bmp = n ...

Memcache在.Net中的使用

一.Memcache基本概念(socket服务器) 本质:是一个在内存上存储的hash表,key的最大值是255字符,最长过期时间为30天 特点:惰性删除,没有监控数据过期的机制,实现最基本的key- ...

Android -- com.android.providers.media,external.db

external.db android是管理多媒体文件(音频.视频.图片)的信息是在/data/data/com.android.providers.media下的数据库文件external.db. ...