【Android】如何实现同一个布局保证高度不变,使用不同高度的背景

背景

预实现一个切换tab,实现选中与未选中的背景切换,特别之处在于选中背景图和未选中背景图高度不相同,切换之后需要在java代码中动态设置LayoutParams改变高度。

预期效果

当前问题点

选中背景为.9图,未选中背景为xml中通过shape实现。

  • 将当前ViewGroup设置为选中状态的固定高度

选中效果正确,但是未选中背景会与选中背景同高,底部边框并未与选中背景平齐,

  • 通过设置下边距实现

设置padding与margin都无效,具体原理简单来说就是我设置的是ViewGroup的背景,padding针对于ViewGroup的子元素有效,margin针对于ViewGroup的父元素有效,所以均无法实现

  • 将ViewGroup的高度设置为wrap_content

设置成自适应需要将未选中的shape设置高度,但是这样存在一个问题就是选中状态是一个.9图片无法做到固定高度,所以选中效果无效

那么,我们该怎么办呢,如果通过xml配置的方式来实现呢?

答案就是: layer-list!

问题分析

我们当前的难点就在于背景图的下边对齐问题,那么我们自然地就想到无外乎就是设置高度,调整边距来解决,上边已经阐述过了我们通过常规的padding和margin是不行的,设置高度也不行。

我们要解决问题的根本就是能不能给未选中的背景图设置一个下边距,让它无法撑满ViewGroup?

上边提到了我们未选中背景是一个shape,那我们可以在shape的外边套上一层layer-list,然后借助它的bottom属性设置边距就可以了!

问题解决

核心代码如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="6dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="@dimen/dp_1"
                android:color="#ffdddddd" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</layer-list> 

大功告成!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 今天我们来探究一下android的样式。其实,几乎所有的控件都可以使用 background属性去引用自定义...
    CokeNello阅读 10,333评论 1 19
  • Android开发中,和布局文件对应 View 一样,Drawable 文件也对应着一个类--Drawable。如...
    食梦兽阅读 12,117评论 2 15
  • [if !supportLists]1.[endif]html5文档结构由 和( )两部分组成? A A. B. ...
    蔚蓝指明阅读 9,193评论 0 1
  • Drat语法 1、基本语法 返回修饰词 main (){} 2、基本数据类型 Drat是强类型语言var 代表不确...
    十年之后_b94a阅读 4,793评论 0 4
  • 1.1CSS 基础与选择器初识 | CSS 1. CSS 加载方式有几种? CSS样式加载一共有四种方式: 1、行...
    没糖_cristalle阅读 4,181评论 0 0