首页 > 其他分享 >【Android】如何实现同一个布局保证高度不变,使用不同高度的背景

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

时间:2023-06-22 11:01:52浏览次数:32  
标签:ViewGroup 同一个 背景 高度 shape 选中 设置 Android


背景

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

预期效果

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

当前问题点

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

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

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

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

  • 通过设置下边距实现

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

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

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

那么,我们该怎么办呢,如果通过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>

大功告成!


标签:ViewGroup,同一个,背景,高度,shape,选中,设置,Android
From: https://blog.51cto.com/u_16163452/6534430

相关文章

  • Android binder 机制驱动核心源码详解
    前言应用程序中执行getService()需与ServiceManager通过binder跨进程通信,此过程中会贯穿Framework、Natve层以及Linux内核驱动。binder驱动的整体分层如上图,下面先来宏观的了解下getService()在整个Android系统中的调用栈,ServiceManager本身的获取:与ServiceManage......
  • Android面试技巧总结,这下offer稳啦
    最近有很多朋友给我后台留言:自己投了不少简历,但是收到的面试邀请却特别少;好不容易收到了大厂的面试邀请,但是面试官问得太深了,结果也挂了;对于面试官的问题,明明知道该怎么做,但是却说不清楚。这些问题不是个例,很多人都有这样的困扰。很大一部分是技术层面的问题。薪资比较高的前端岗位......
  • 六年Android开发从组员到Leader的心路历程分享
    前言在互联网工作的这些年,大厂和小厂都待过,也接触过各种各样的管理者和组员,直到近两年自己开始成为技术Leader,算是在两种角色上都有些切身的心得体会,这里给大家分享下,希望能给大家的职场工作带来一些启发。简单说明下,在毕业不久加入阿里的第一年,团队大概十几个人,作为三个新人之一,......
  • Android太太太太太卷了,累了
    我们聊到互联网行业的时候,一个不可避免的话题就是“内卷”,而在程序员这个群体中,Android,绝对是卷得最厉害的。毕竟前几年Android兴起的时候,入门门槛低,培训机构培养了大批Android开发,市面上的初级前端根本不缺,他们很多也是在一些中小厂里写一些重复性的业务代码,再加上后面又有更多的A......
  • Android - Jetpack ViewModel源码探秘
    ViewModel使用场景当横竖屏切换时,希望数据不丢失,可以用ViewModel当成存储媒介;可作为Activity&Fragment通讯的媒介;ViewModel的创建//Activity中构建MyViewModelViewModelProvider(this).get(MyViewModel::class.java)//ViewModelProviders类中publicViewModelProvider(@NonNu......
  • 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活?
    这是我在某论坛看到别人分享的故事,觉得可以展开聊一下,对于我们这些中年程序员,可以裸辞吗?前言首先介绍一下主人公的情况。目前所在的是一家小的创业公司,待了3年多,薪资一般吧,之前在一家中型上市企业也干了三年,因为想涨薪所以跳到现在这家小公司。就在年前,公司年终总结,公司老板会和各......
  • 字节跳动总监封神之作《Android11.0最新Framework解析》,1595页,限时免费下载高清PDF文
    Framework始终穿插在App整个研发生命周期中,不管是从0到1的建立阶段,还是从1到N打磨阶段,都离不开Framework。成为一名AndroidFramework高手,就会成为招聘中非常稀缺的人才,可以成为你的敲门砖。很多同学都表示在面试时必问Framework相关问题。因为目前大公司的app开发都要基......
  • 那些年我面过的「六年经验」的Android初级工程师
    前言不知不觉,作为一个Android团队负责人已经好几年了,在这几年中面试过很多同学,有实习生、有初级的、有中级的、也有高级的。近来回顾以往面试过程,感觉有一些求职者的工作经验和自身能力不匹配,比如六年经验的初级工程师,当然这里只是感觉。不从技术能力来判断,是从一些非技术能力来判......
  • 字节总监用了半个月整理出的1595页《Android11.0 最新Framework解析》高清PDF开发下载
    作为过来人,发现很多学习者和实践者都在AndroidFramework上面临着很多的困扰,比如:工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、思路的指引以及工具支持;能力修炼中,缺乏互联网项目这一实践环境,对Fram......
  • Android开发想转行音视频,应该要怎么做?
    在星球经常被问到的问题,Android开发想转行音视频,应该要怎么做?很多人对此都有疑惑,不光有工作多年的职场老司机,也有求学期间的研究生同学们,摘录了其中一部分提问,可以看到大家的疑惑是有类似的。对于星球用户的每个提问我都有认真回答,毕竟每个人的情况不一样,没有什么统一的答案。这些......