Android布局的一些实用小策略

以下是一些项目中经常用到的布局实现方案,当然这些方案并非唯一的实现方式,也不一定是最好的实现方式,大概罗列一下,仅供参考,也欢迎大家共同讨论学习。


1.需求:将一个Button在一行中居中,并且Button的宽度占屏幕宽度的一半。

解决方案:先看具体的xml,如下

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

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

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:background="#708069"

    android:gravity="center_horizontal"

    android:orientation="horizontal"

    android:weightSum="1" >

 

    <Button

        android:layout_width="0dp"

        android:layout_height="wrap_content"

        android:layout_weight="0.5"

        android:text="测试按钮" />

 

</LinearLayout>

其中LinearLayout的android:gravity="center_horizontal"作用是让Button水平居中;LinearLayout的android:weightSum="1",Button设置android:layout_weight="0.5",则表示button占据父布局即LinearLayout一半的宽度,而LinearLayout为match_parent,因此Button会占据屏幕一半的宽度。

最终效果:


2.需求:TextView文本最多显示两行,多则在末尾打点显示。

解决方案:为TextView添加如下属性:

android:maxLines="2"

android:ellipsize="end"

第一个属性表示该TextView最多可显示两行。第二个属性设为end,表示将会在末尾打点,还可以设为其他属性,如start、middle、none等,根据名字很容易就能理解了。

注意有一个android:ellipsize="marquee",即传说中的跑马灯效果,

若要让TextView里的文本滚动,必须满足以下几个因素:

(1)TextView里文本宽度超过TextView的宽度,一般需设置android:singleLine="true"

(2)android:ellipsize="marquee"

(3)只有在TextView获取到焦点时,才会滚动.所以加上android:focusableInTouchMode="true" 

android:focusable="true"

滚动重复次数设置:

android:marqueeRepeatLimit="marquee_forever"

 

注意:有时候设置了android:maxLines="2",而文字只有一行的时候,会导致TextView跟有两行文字时高度不一致,因此常常同时设置

android:lines="2",强制占据两行的高度。

3.需求:给文字设置下划线、中划线

解决方案:如下代码分别设置了下划线和中划线

textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG ); 

textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

注意,所生成的线的颜色跟TextView文字的颜色是一致的,如果想把文字和下划线分别设为不同的颜色,貌似没有发现TextView有现成的方法或属性支持,我们可以采用其他策略实现,如文字和下划线使用两个不同的view来实现。

4.需求:页面上部分是一个ListView,下面是一个Button且固定在底部。

解决方案:最外层使用RelativeLayout,Button设置Layout_alignParentBottom为true,同时给ListView设置Layout_above属性,将其放到Button上面。

5.需求:TextView或Button紧挨的右侧防止一个文字大小的图标。当然不一定是在右侧,上下左右皆可,这里以图标在右侧为例。

解决方案:当然使用两个 view可以搞定。但最简单的莫过于使用android:drawableRight="@drawable/icon_right"属性,还可以使用 android:drawablePadding="6dp"来设置图标与TextView或Button的距离。

6.需求:实现下图的效果


解决方案:

(1)左右分别为TextView和ImageView(当然使用Button也可以,这不是重点),外层包一个水平的LinearLayout。使用shape为TextView和Button分别设置带圆角(左边的shape设置左上和左下圆角,右边的shape设置右上和右下圆角)和蓝色边框的背景。这样做的问题是TextView的右边框和Button的左边框都会存在,导致中间的线会是正常边框的两倍。因为shape不支持隐藏某一边的边框,因此只能另想他法,我采用了将右边Button左移动1dp(边框的宽度为1dp,或者TextView右移1dp),这样中间的两个线条就会重合,基本可以实现如图效果,但也有瑕疵,细看的话,中间的竖线由于是两条线的重合效果,会显得比边框亮一些。

(2)为外层LinearLayout设置带四个圆角和颜色的边框,LiearLayout里面水平放置2个控件,左边TextView,中间一个竖线View(width=1dp,跟边框相同宽度,高度为match_parent,颜色为边框颜色),右边是Button,然后再给TextView和Button设置shape背景,与方法(1)不同的是不要设置实体边框,因为LinearLayout已经设置了边框。这样实现的效果就比较完美了。值得注意的是需要给LinearLayout设置一个边框宽度大小的padding,不然TextView和Button的默认颜色会覆盖掉LinearLayout边框的颜色,导致看不到外层边框。

 

7.需求:最外层是LinearLayout,里面水平从左到右放TextView A,TextView B和一个Button C,要求A居左,C居右,B紧靠A,且单行显示,如果文字过多则打点。

解决方案:为A设置android:layout_width="wrap_content",为C设置 android:layout_width="wrap_content",且 android:gravity="right|center_vertical",为B设置android:layout_width="0dp",android:layout_weight="1"和android:singleLine="true"。 很容易理解,A在左边,C在右边,然后B利用权重占据剩余的水平空间,由于设置了singleLine,因此文字如果超过一行就会打点。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值