什么是此XML布局的替代方法(Lint警告)

时间:2012-07-02 17:20:23

标签: android xml android-layout android-lint

就在这里,这个布局将为您提供 3个图像,这些图像的宽度相等,宽度与3个文本视图中的最长文本一样宽。

它们的宽度相等,因为它们是match_parent而父级是wrap_content到最大的TextView。

3个文本视图以背景为中心,左侧和右侧等于空格。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0000FF"
    android:gravity="center" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

      <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="#FF0000"
         android:drawableLeft="@drawable/ic_launcher"
         android:text="view 1"/>

      <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="#FF0000"
         android:drawableLeft="@drawable/ic_launcher"
         android:text="view 2"/>

      <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="#FF0000"
         android:drawableLeft="@drawable/ic_launcher" 
         android:text="view 3 longer text"/>

  </LinearLayout>
</LinearLayout>

像这样:

Preview

问题是Lint正在发出内部LinearLayout无效的警告。(这不是因为它是内部文本视图变得宽度相同的原因。

Lint error

任何人都可以生成相同的布局,但没有lint警告吗?

4 个答案:

答案 0 :(得分:2)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">

  <TextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="view 1"/>

  <TextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="view 2"/>

  <TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" 
     android:text="view 3 longer text"/>
</LinearLayout>

这给了我类似的结果,Lint没有任何错误。我已从代码中删除了drawable标签,因为我没有使用您的drawables。只需添加它们。这里唯一的问题是你不能在LinearLayout标签中放置背景。您必须为您的活动创建自定义主题,这非常简单,因为您可以将现有主题设置为父级,只需更改背景值...更多关于主题here

答案 1 :(得分:1)

经过深思熟虑......这是我的解决方案,即将外部线性布局更改为帧布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0000FF" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:orientation="vertical" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FF0000"
            android:drawableLeft="@drawable/ic_launcher"
            android:text="view 1" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FF0000"
            android:drawableLeft="@drawable/ic_launcher"
            android:text="view 2" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FF0000"
            android:drawableLeft="@drawable/ic_launcher"
            android:text="view 3 longer text" />
    </LinearLayout>

</FrameLayout>

您可以将lineaer布局上的布局重力设置为:

android:layout_gravity="center_vertical|center_horizontal"

或在框架布局上设置常规重力。

答案 2 :(得分:1)

因为它只是一个警告,并且你知道布局没有用处,你可以忽略它。

或者,您可以通过向内部LinearLayout添加android:background="@null"来欺骗lint。

答案 3 :(得分:0)

您是否尝试在线性布局中使用RelativeLayout?