2012-04-25 14 views
9

Sto sviluppando un Android 3.1. e sopra l'applicazione.Questo layout RelativeLayout o il relativo genitore LinearLayout è inutile

In una attività viene generato dinamicamente il layout. Sto usando formdetail.xml come 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 e formErrorMsg deve essere sempre in forma.

Ma usando che XML ottengo questo avvertimento:

This RelativeLayout layout or its LinearLayout parent is useless

Ho bisogno LinearLayout aggiungere TableLayouts di programmazione.

Come posso risolvere questo avviso?

+1

Penso che il tuo involucro layout di genitore solo figlio ed è possibile ottimizzare il layout rimuovendo genitore LinearLayout – Borys

risposta

7

È possibile ignorarlo o fare clic con il pulsante destro del mouse sul progetto. Fare clic su Build Path->Configure Build Path.... Sotto Android Lint Preferences cerca UselessParent e imposta la sua gravità in modo che ignori o fai clic su Ignore All.

EDIT:

prendo l'ultima parte posteriore. Penso che Ignore All cancellerà tutti gli avvisi e gli errori di Lint.

+0

In Eclipse Juno è questo menu si trova in Preferenze Proprietà-> Lint Android del progetto – GMBrian

1

Questo è solo un avviso da lint. Lint non sa che in seguito aggiungerai le visualizzazioni a questo layout e ti avviserà che hai aggiunto una vista aggiuntiva non necessaria (aumentando la profondità del layout).

Dovresti semplicemente ignorare l'avviso (se ti dà davvero fastidio ecco un link su how to remove warnings da lint).

12

Lint è corretto nel suo avviso, il LinearLayout non sta facendo nulla di utile, dal momento che il suo unico figlio è un RelativeLayout. Rimuovere 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

Come si può leggere nel mio domanda, ho bisogno di un LinearLayout per aggiungere TableLayouts a livello di programmazione. – VansFannel

+2

quindi puoi aggiungerli al tuo RelativeLayout ... in entrambi i casi stavo semplicemente spiegando il motivo per l'avviso Lint – CSmith

2

Avevo anche lo stesso problema con il layout della mia app.

Non so come e sia giusto o meno, ma questo viene risolto dopo aver impostato l'attributo dello sfondo su entrambi i layout.

Ora non c'è avviso e funziona perfettamente. Spero che funzionerà anche per te.

<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

Ho avuto due layout lineari che il linter ha riconosciuto come ridondanti, ma il primo contiene un'immagine di sfondo fissata al origini dello schermo, il secondo layout posiziona alcuni campi di input e i testi centrati come un gruppo in orizzontale e verticale.Non sono riuscito a trovare un modo per ottenerlo senza utilizzare i due layout, quindi definire l'androide: gli attributi di sfondo di entrambi i layout hanno eliminato l'avviso. –

Problemi correlati