2012-04-25 20 views
9

Estoy desarrollando un Android 3.1. y por encima de la aplicación.Este diseño RelativeLayout o su padre LinearLayout es inútil

En una actividad, genero su diseño dinámicamente. Estoy usando formdetail.xml como contentView:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.formdetail); 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) 
    { 
     currentFormId = extras.getString("FormId"); 
    } 
} 

formdetail.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/detailLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 
     <Button 
      android:id="@+id/downloadFormsButton" 
      android:enabled="false" 
      android:layout_alignParentLeft="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:text="@string/download_forms_button" /> 
     <TextView 
      android:id="@+id/formErrorMsg" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentBottom="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:textSize="16dp" > 
     </TextView> 
    </RelativeLayout> 

</LinearLayout> 

downloadFormsButton y formErrorMsg debe estar siempre en forma.

Pero el uso de XML que me da este aviso:

This RelativeLayout layout or its LinearLayout parent is useless

necesito LinearLayout añadir TableLayouts mediante programación.

¿Cómo puedo solucionar este aviso?

+1

Creo que su padre diseño envoltura de un solo hijo y se puede optimizar su diseño mediante la eliminación de los padres LinearLayout – Borys

Respuesta

7

O lo ignora o hace clic derecho en su proyecto. Haga clic en Build Path->Configure Build Path.... Debajo de Android Lint Preferences busque UselessParent y configure su gravedad para ignorar o hacer clic en Ignore All.

EDIT:

tomo esa última parte de atrás. Creo que Ignore All borrará todas las advertencias y errores de Lint.

+0

En Eclipse Juno es este menú se encuentra en Preferencias Properties-> Android Lint de su proyecto – GMBrian

1

Eso es solo una advertencia de lint. Lint no sabe que posteriormente agregaría vistas a este diseño y le advertirá que agregó una vista adicional innecesaria (lo que aumenta la profundidad de diseño).

Simplemente debe ignorar la advertencia (Si realmente le molesta aquí hay un enlace en how to remove warnings de lint).

12

Lint es correcto en su advertencia, su LinearLayout no está haciendo nada útil, ya que su único hijo es RelativeLayout. Quite el LinearLayout:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/detailLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<Button android:id="@+id/downloadFormsButton" 
     android:enabled="false" 
     android:layout_alignParentLeft="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp" 
     android:text="@string/download_forms_button" /> 
<TextView 
     android:id="@+id/formErrorMsg" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentBottom="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:textSize="16dp" /> 
</RelativeLayout> 
+0

Como se puede leer en mi pregunta, necesito un LinearLayout para agregar TableLayouts programáticamente. – VansFannel

+2

y luego puede agregarlos a su RelativeLayout ... de cualquier manera solo estaba explicando el motivo de la advertencia de Pelusa – CSmith

2

También estaba teniendo el mismo problema con el diseño de mi aplicación.

No sé cómo y es correcto o no, pero esto se resuelve después de establecer el atributo de fondo en ambos diseños.

Ahora no hay advertencia y funciona perfecto. Espero que también funcione para ti.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:background="@drawable/bg" 
    android:layout_height="match_parent" > 

     <FrameLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginBottom="10dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:background="@drawable/bg2" 
      android:layout_marginTop="10dp" > 

      <ImageView 
       android:id="@+id/img_BookImage" 
       android:layout_width="200dp" 
       android:layout_height="200dp" 
       android:scaleType="fitXY" 
       android:contentDescription="@string/India" 
       android:src="@drawable/india" /> 
     </FrameLayout> 

    </FrameLayout> 
+0

Tenía dos diseños lineales que el linter reconoció como redundantes, pero el primero tiene una imagen de fondo que está fijada al orígenes de pantalla, el segundo diseño coloca algunos campos de entrada y textos centrados como un grupo horizontal y verticalmente.No pude encontrar una manera de tener eso sin usar los dos diseños, por lo que la definición de los atributos android: background de ambos diseños eliminó la advertencia. –

Cuestiones relacionadas