最优解

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">

    <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然后再添加。

效果如下

LinearLayout android 子view长度限制 android studio linearlayout间距_Divider

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 android 子view长度限制 android studio linearlayout间距_Android_02

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

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)的正确姿势,希望你有所收获。