最优解

2022年03月31日20:50:54更新
Android (2022 xml版)LinearLayout添加间隔(Divider)的正确姿势
这里用inset的方式在xml里进行了解决。各取所需

我们直接看最优解

     int width = 50;LinearLayout linearLayout = findViewById(R.id.ll_5_base);GradientDrawable drawable = new GradientDrawable();drawable.setSize(width,1);linearLayout.setDividerDrawable(drawable);linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);

如果你一下就看懂了,就可以X掉这个网页了。如果想看看还有什么别的方法,可以继续往下看。

方案分析

在开发中我们有时候会遇到给LinearLayout的iitem添加间隔的问题,有一下几种方案供选择。

  1. 给每个item添加margin或padding。这个方法的缺点非常明显,如果要修改间隔则非常麻烦,而且item一旦设置了间隔则复用性不好,我也会为这个方法给出优化方案来解决这个问题。
  2. 在每一个item之间添加一个空白的view来顶起来,这个方法和LinearLayout提供的divider非常相似,LinearLayout给出的方法是在每个item之间添加一个Drawable,所以这个思路我们会根据官方的做法来解决。

这两个方法优化之后其实效果都差不多,下面就来看代码吧。

1.添加Margin和Padding最优解

这种方法只能添加空白的间隔,不能添加间隔线。代码如下,看完代码再分析。

首先定义好xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_5_base"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><Buttonandroid:id="@+id/bt_12345"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="12345" /><Buttonandroid:id="@+id/bt_12347"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="12347" /><Buttonandroid:id="@+id/bt_12346"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="12346" /></LinearLayout>

我们再一个LinearLayout里添加了3个Button,现在我们就用代码来添加间隔

        LinearLayout linearLayout = findViewById(R.id.ll_5_base);        int llChildCount = linearLayout.getChildCount();int width = 50;LinearLayout.LayoutParams llParams;if (llChildCount > 1) {for (int i = 1; i < llChildCount; i++) {View view = linearLayout.getChildAt(i);llParams = (LinearLayout.LayoutParams) view.getLayoutParams();llParams.setMarginStart(width);}}

因为所有的View都是继承自View这个类的,所以我们把它们依次找到然后添加margin即可实现添加间隔的目的,要注意的一点是,动态addView的时候需要先添加LayoutParams然后再添加。

效果如下

2.使用LinearLayout的Divider来添加间隔最优解

LinearLayout提供了通过xml静态添加Divider的方法,代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_5_base"android:layout_width="match_parent"android:layout_height="match_parent"android:showDividers="middle"android:divider="@drawable/line"android:gravity="center">

showDivider提供了四种添加Divider的方式,大家看一下就会懂。Divider我使用shape写了一个透明的占位图片,代码如下

<shape android:shape="rectangle"xmlns:android="http://schemas.android.com/apk/res/android" ><size android:height="1dp" android:width="50dp"/></shape>

看效果

动态修改间隔大小方法如下

        LinearLayout linearLayout = findViewById(R.id.ll_5_base);Drawable drawable =                                        ResourcesCompat.getDrawable(getResources(),R.drawable.line,null);((GradientDrawable) drawable).setSize(20,1);linearLayout.setDividerDrawable(drawable);linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);

这样我们也可以做到动态修改间隔的目的。

最优解

我们无需新建任何文件,使用以下代码即可。

     int width = 50;LinearLayout linearLayout = findViewById(R.id.ll_5_base);GradientDrawable drawable = new GradientDrawable();drawable.setSize(width,1);linearLayout.setDividerDrawable(drawable);linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);

这样即可添加Divider,我一般都是使用这种方法。

总结

好啦,这就是Android LinearLayout添加间隔(Divider)的正确姿势,希望你有所收获。

Android LinearLayout添加间隔(Divider)的正确姿势相关推荐

  1. Android SELinux开发入门指南之正确姿势解决访问data目录权限问题

      Android SELinux开发入门指南之正确姿势解决访问data目录权限问题 Android SELinux开发多场景实战指南目录: Android SELinux开发入门指南之SELinux ...

  2. android LinearLayout添加分隔线

    方法一: 可以放置一个ImageView组件,然后将其设为分隔线的颜色或图形. 分隔线View的定义代码如下: [html] view plaincopy <ImageView android: ...

  3. IDEA添加子Module的正确姿势

    因需求要增加一个新的测试模块,于是要在一堆Module中再添加一个Module,单纯的我没有丝毫杂念的开始进行添加了. 1. 要在哪个目录下添加Module, 就对着该目录右击 -> new - ...

  4. Android 获取屏幕宽高的正确姿势

    前言 在开发时,我们经常需要根据屏幕的宽高来进行对view的适配,无论是自定义view还是andorid自带的一些控件,比如说需要占当前屏幕高度的30%,就需要获取到屏幕的宽高,但在获取宽高时我遇到了 ...

  5. Android Studio引入.so文件的正确姿势 以及调用.so 文件时报错has text relocations 解决

    首先在src同级目录下创建libs目录讲需要的.so复制到这里效果如图 然后在app级别的build.gradle配置lib路径,效果如果 完整代码如下: apply plugin: 'com.and ...

  6. Android获取设备状态栏status bar高度的正确姿势

    Android获取设备状态栏高度的正确姿势 正确代码方式: int height = 0;int resourceId = getApplicationContext().getResources() ...

  7. 正确姿势临时和永久开启关闭Android的SELinux

          正确姿势临时和永久关闭Android的SELinux Android SELinux开发多场景实战指南目录: Android SELinux开发入门指南之SELinux基础知识 Andro ...

  8. Android Material Design :LinearLayoutCompat添加分割线divider

     Android Material Design :LinearLayoutCompat添加分割线divider Android Material Design 扩展支持包中的LinearLayo ...

  9. Ubuntu下正确姿势使用GDB调试Android Native进程

        Ubuntu下正确姿势使用GDB调试Android Native进程 前言   对于Android Native进程大家是既爱又恨啊,爱的是它能为我们的Android世界带来别样的精彩,狠的是 ...

最新文章

  1. 【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
  2. Python包、模块、类以及遇到的问题
  3. javascript实现二叉搜索树
  4. 银河麒麟配置java环境_中标麒麟系统上安装Java、Eclipse指南.doc
  5. L2-031 深入虎穴 (25 分)-PAT 团体程序设计天梯赛 GPLT
  6. 在线Javascript压缩工具
  7. 前端证券项目_非科班二本前端大厂面试的心路历程和总结(腾讯、头条、阿里、京东)...
  8. xilinx sdk退出Debug模式回到C开发布局
  9. 22个开源的PHP框架
  10. VC 项目支撑文件解释
  11. 芬朗DSP电脑调音软件
  12. 雅型钢五金大全(五金计算器)绿色便携版V20220512 | 实用五金计算软件下载
  13. 腰围尺寸2尺1、2、3、4、5、6、7、8寸分别等于是多少厘米/英寸(对照参考表)
  14. 打印驱动的安装和卸载
  15. 解决macbook键盘失灵问题
  16. Day101.MyBatisPlus(MP):自动填充、乐观锁、分页、逻辑删除、Wrapper条件构造器
  17. Git(七)——删除历史版本,保留当前状态
  18. ImportError: sys.meta_path is None, Python is likely shutting down 解决方案
  19. Jekyll 教程——合集(collections)
  20. 华为一级产品线介绍(部分)

热门文章

  1. 两分钟了解日本棒球体系·棒球2号位
  2. 3ds max 脚本清除自定义属性
  3. android wear tizen,Tizen VS Android Wear:哪款手表更适合你?
  4. 蓝桥杯训练-礼物盒问题-JAVA
  5. python大家都用来做什么-学 Python 都用来干嘛的?
  6. 叮咚音箱 服务器挂了吗 无法注册,叮咚音箱连不上网怎么解决
  7. python多线程并发请求
  8. 转化率分析的四个维度
  9. 计算机毕业设计Java酒店管理系统设计与实现(源码+系统+mysql数据库+lw文档)
  10. 公众号付费势不可挡,罗胖、轻课们开启新教育时代?