2016-07-13 27 views
9

Con GridLayout questa è una definizione di layout valida. Non c'è nessun avvertimento circa 'layout_height' attribute should be defined o 'layout_width' attribute should be definedEstensione di GridLayout

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView /> 
</GridLayout> 

Sul otherhand, se estendo GridLayout il layout equivalente dà entrambe le avvertenze 'layout_height' attribute should be defined e 'layout_width' attribute should be defined

<ExtendedGridLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView /> 
</ExtendedGridLayout> 

questo è ciò che il GridLayout esteso sembra

package com.github.extendedgridlayout; 

import android.annotation.TargetApi; 
import android.content.Context; 
import android.os.Build; 
import android.util.AttributeSet; 
import android.widget.GridLayout; 

@SuppressWarnings("unused") 
public class ExtendedGridLayout extends GridLayout { 
    public ExtendedGridLayout(Context context){ 
     super(context); 
    } 

    public ExtendedGridLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ExtendedGridLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public ExtendedGridLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 
} 

Ho provato a guardare attraverso lo GridLayout fonte, e sembra che quello che hanno fatto è stato quello di estendere ViewGroup.LayoutParams e impostare una larghezza e un'altezza di default, come per PercentRelativeLayout

Così dovrebbe sembrare che in base al largo di eredità, ExtendedGridLayout dovrebbe anche impostare una larghezza predefinita e altezza per i suoi figli o fare qualunque cosa sia GridLayout per evitare il messaggio di avvertimento nell'editor di layout.

Quindi la mia domanda è: perché ExtendedGridLayout ha l'avviso e come posso prevenirlo?

+0

Personalmente preferisco creare la mia vista con 'LinearLayout's invece di usare' GridLayout' inutile'. –

+0

Per cosa è lo ? Perché non vorresti dargli larghezza e altezza? – auval

+0

@uval gridview imposta la larghezza e l'altezza dei suoi figli. Soprattutto quando si specifica esplicitamente la colonna e il conteggio delle righe – Olumide

risposta

2

Questo è il comportamento predefinito di AndroidStudio.
Un modo per evitare che l'errore si stia eliminando.

<ExtendedGridLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <!--suppress AndroidDomInspection --> 
    <ImageView /> 

</ExtendedGridLayout> 

Android Studio salta mostrando che l'errore con GridLayout, Ma non salta con i figli di GridLayout. Ecco the source code dell'ispettore di AndroidStudio.

Qui è related bug report.
Da questo bug report, il problema si è verificato come this.

+0

Il bug report è diverso dalla mia situazione. Nel bug report GridLayout mostra gli avvertimenti per alcuni elementi figli, ma nel mio caso il ExtendedGridLayout mostra avvisi per tutti gli elementi figlio. Anche la segnalazione di bug dice che il bug è stato corretto nella versione 0.3.2 e sono nella versione 2.1.2 – Olumide

+0

Oh, scusate il mio povero inglese. Intendevo dire che c'è un problema correlato. Da quel bug report, il problema sembra essersi verificato. – nshmura

+1

La mia risposta è stata aggiornata. – nshmura