如何在XML中使用Android属性的否定值?

时间:2014-10-07 13:20:59

标签: android android-layout

我有一个简单的相对布局,其中包含ImageView的图标和TextView的标题:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                style="@style/Test.NavBar.Heading"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal">
    <ImageView
            style="@style/Test.NavBar.Heading.Icon"
            android:id="@+id/test_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"/>
    <TextView
            style="@style/Test.NavBar.Heading.Text.Large"
            android:id="@+id/test_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/test_logo"
            android:layout_toEndOf="@+id/test_logo"
            android:layout_alignTop="@id/test_logo"
            android:layout_alignBottom="@id/test_logo"
            android:gravity="center_vertical"
            android:text="My Title"/>
</RelativeLayout>

这是嵌入在另一个视图中,它使我的视图水平居中。一切都很好,除了我需要将布局置于TextView而不是RelativeLayout的中心。

我唯一可以访问的是一个属性,它为ImageView提供了iconWidth中项目的宽度,称为android:layout_marginLeft="?attr/iconWidth" 。通常,您可以使用margin属性来偏移布局,例如上面我可以添加

android:layout_marginLeft="-?attr/iconWidth"

但是将布局推向右侧而不是左侧。相反,我需要做类似的事情:

RelativeLayout

除了当然没有有效的语法。

我必须在一个布局中执行此操作,并且必须以XML格式执行此操作,并且无法要求添加其他属性。鉴于这些约束,我如何根据需要偏移{{1}}的内容?

1 个答案:

答案 0 :(得分:0)

经过各种尝试找到解决方案之后,我发现最好的方法就是在文本后添加另一个图标,但要使其不可见:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                style="@style/Test.NavBar.Heading"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal">
    <ImageView
            style="@style/Test.NavBar.Heading.Icon"
            android:id="@+id/test_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"/>
    <TextView
            style="@style/Test.NavBar.Heading.Text.Large"
            android:id="@+id/test_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/test_logo"
            android:layout_toEndOf="@+id/test_logo"
            android:layout_alignTop="@id/test_logo"
            android:layout_alignBottom="@id/test_logo"
            android:gravity="center_vertical"
            android:text="My Title"/>
    <ImageView
            style="@style/Test.NavBar.Heading.Icon"
            android:id="@+id/test_blank"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/test_title"
            android:layout_toEndOf="@+id/test_title"
            android:src="@drawable/ic_launcher"
            android:visibility="invisible"/>
</RelativeLayout>

使用这个额外但不可见的图标,TextView现在位于RelativeLayout的中间,这解决了问题。