最优解

我们直接看最优解

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">    <Button        android:id="@+id/bt_12345"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="12345" />    <Button        android:id="@+id/bt_12347"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="12347" />    <Button        android: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)的正确姿势,希望你有所收获。

更多相关文章

  1. Android的Service中弹出窗口解决方法
  2. Android使用线程获取网络图片的方法
  3. Android AndroidManifest.xml 四大组件注册方法
  4. Android中onClick的四种实现方法
  5. android中获取IP的方法
  6. Android NDK 工具链的使用方法(Standalone Toolchain)
  7. 使用反射获取Android中隐藏的方法
  8. android 100行代码实现 仿苹果滑动选择器WheelView

随机推荐

  1. Android 代码获取手机屏幕分辨率的代码
  2. android 自定义对话框宽不能占满父layout
  3. Android点击通知栏返回正在运行的Activit
  4. Android两种计步器sensor
  5. android实现应用程序无图标(快捷方式)问
  6. [Android分享] Android(安卓)Manifest.xm
  7. 自制最简Android MusicPlayer
  8. Android 同个TextView设置字体大小不一样
  9. Android与(Servlet)服务器交互
  10. Android ExpandableListActivity 学习笔