具有“启用/选定”边框的水平LinearLayout

时间:2015-06-03 12:47:53

标签: android android-layout

我试图找到一个很好的(r)解决方案来解决当前的布局问题:

我有一个带有2个TextView和2个ImageView的LinearLayout,每对视图(文本或图像)可以选择一个,应该显示为底部边框/下划线。

现在我使用以下方法:我将这些视图中的每一个都包装在另一个LinearLayout中,并使用这样的背景(背景是我的底部边框):

抽拉\ preferred_border:

    <item
    android:bottom="1dp"
    android:left="-3dp"
    android:right="-3dp"
    android:top="-3dp">
    <shape android:shape="rectangle" >
        <stroke
            android:width="2dp"
            android:color="@color/nd_blue" />

        <solid android:color="#00FFFFFF" />


    </shape>
</item>

(这是我在stackoverflow上找到的“hack”,用于添加底部边框)

这种方法非常好但有一个缺点:文本/图像与其边框之间的距离是通过最里面视图的paddingBottom完成的(边框在另一个包装LinearLayout中设置为背景)。现在,如果文本和图像的高度不同,则底部边框不会在垂直位置对齐!

它在我的应用中的外观示例:

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true">

        <LinearLayout
            android:id="@+id/wrapper_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_marginLeft="3dp"
            android:layout_marginRight="3dp"
            android:background="@drawable/preferred_border">
            <TextView
                android:id="@+id/one"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:singleLine="true"
                android:text="@string/one"

                android:paddingBottom="12dp"
                />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/wrapper_two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_marginLeft="10dp"
            android:layout_marginRight="3dp"
            android:background="@drawable/preferred_border">
                <TextView
                    android:id="@+id/twot"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:singleLine="true"
                    android:text="@string/two"

                    android:paddingBottom="12dp"
                    />
        </LinearLayout>
    </LinearLayout>

这对ImageViews相同,只是它显然使用了ImageView。整个东西也被打包成一个RelativeLayout。

现在我尝试通过稍微调整填充和图像大小来尽可能地对齐它们,但这不是一个很好的方法。我希望有一个干净的解决方案在android中使用良好的布局技能:p

感谢您提供任何帮助/建议!

1 个答案:

答案 0 :(得分:0)

申请 将您的drawable保存为 customborder_xml.xml

<?xml version="1.0" encoding="UTF-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
        <stroke android:width="1dp" android:height="1dp"
            android:color="#000000" />
                   <padding android:left="10dp" android:top="10dp"   android:right="10dp"
            android:bottom="10dp" />


        <corners android:radius="1dp" android:bottomRightRadius="5dp"
            android:bottomLeftRadius="0dp" android:topLeftRadius="5dp"
            android:topRightRadius="0dp" />
    </shape>
  </item>
</layer-list>

并将其设置为你的布局

android:background="@drawable/customborder"