无法在TextViews上独立设置填充

时间:2015-05-25 09:05:26

标签: android android-layout

在为ListView中的元素测试LinearLayout的一些设计时,我偶然发现了一些奇怪的行为。正如您在添加的代码中看到的,我在水平LinearLayout中有三个TextView。我想为其中一个TextView设置填充,但似乎这个值也应用于其他TextViews作为某种边距(见图片)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="48dp">

    <TextView
        android:id="@+id/search_list_row_symbol"
        android:layout_width="wrap_content"
        android:layout_height="16dp"
        android:paddingTop="0dp"
        android:layout_marginTop="0dp"
        android:textSize="16sp"
        android:background="@android:color/holo_blue_light"
        android:text="O"/>

    <TextView
        android:id="@+id/search_list_row_name"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1"
        android:paddingTop="0dp"
        android:layout_marginTop="0dp"
        android:textSize="16sp"
        android:background="@android:color/holo_red_light"
        android:text="oxygen"/>

    <TextView
        android:id="@+id/search_list_row_number"
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:paddingTop="0dp"
        android:layout_marginTop="0dp"
        android:textSize="16sp"
        android:background="@android:color/holo_green_light"
        android:text="8"/>

</LinearLayout>

在所有TextView上设置android:paddingTop="0dp" padding_top_set_to_0

仅在第一个TextView上设置android:paddingTop="16dp" padding_top_set_to_16

你们有没有人知道为什么不能在其中一个TextView上独立设置填充?

3 个答案:

答案 0 :(得分:1)

一个有点奇怪的错误,对我有用的唯一解决方案是为其他文本视图添加负边距

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="48dp">

    <TextView
        android:id="@+id/search_list_row_symbol"
        android:layout_width="wrap_content"
        android:layout_height="32dp"
        android:paddingTop="16dp"
        android:textSize="16sp"
        android:background="@android:color/darker_gray"
        android:text="O"/>

    <TextView
        android:id="@+id/search_list_row_name"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1"
        android:textSize="16sp"
        android:layout_marginTop="-16dp"
        android:background="@android:color/white"
        android:text="oxygen"/>

    <TextView
        android:id="@+id/search_list_row_number"
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:textSize="16sp"
        android:layout_marginTop="-16dp"
        android:background="@android:color/darker_gray"
        android:text="8"/>

</LinearLayout>

答案 1 :(得分:0)

这种行为似乎是正确的,因为填充应用于视图的内容 - 而不是视图本身。但是,从第一个子视图填充后的剩余子视图似乎是错误的。

作为替代方案,我建议您将kellen({ 'peter piper picked a peck of pickled peppers' }, 'p', 'b') 替换为paddingTop,它应该可以正常工作。

答案 2 :(得分:0)

因为您只给了一个文本视图填充。如果你想要所有文本视图,你必须将所有三个保持在一个LinearLayout并设置属性,即setPadding()或setPaddingTop()。

我认为这可能会对你有帮助。