android - example - how to make a widget




Cosa significa android: layout_weight? (9)

Aggiunta di android:autoSizeTextType="uniform" ridimensionerà automaticamente il testo

Non capisco come usare questo attributo. Qualcuno può dirmi di più a riguardo?


Combinando entrambe le risposte di

Flo & rptwsthi e roetzi,

Ricordati di cambiare layout_width=0dp/px , altrimenti il ​​comportamento di layout_weight agirà inverso con il numero più grande occupato nello spazio più piccolo e il numero più basso occupato lo spazio più grande.

Inoltre, alcune combinazioni di pesi causeranno la mancata visualizzazione di un layout (poiché occupa più spazio).

Attenzione a questo.


In poche parole, layout_weight specifica la quantità di spazio aggiuntivo nel layout da assegnare alla vista.

LinearLayout supporta l'assegnazione di un peso ai singoli bambini. Questo attributo assegna un valore di "importanza" a una vista e gli consente di espandersi per riempire qualsiasi spazio rimanente nella vista genitore. Il peso predefinito delle viste è zero.

Calcolo per assegnare qualsiasi spazio rimanente tra i bambini

In generale, la formula è:

spazio assegnato a child = (peso individuale del bambino) / (somma di peso di ogni bambino in Linear Layout)

Esempio 1

Se ci sono tre caselle di testo e due di esse dichiarano un peso di 1, mentre alla terza non viene assegnato alcun peso (0), lo spazio rimanente viene assegnato come segue:

1a casella di testo = 1 / (1 + 1 + 0)

2 casella di testo = 1 / (1 + 1 + 0)

3a casella di testo = 0 / (1 + 1 + 0)

Esempio 2

Diciamo che abbiamo un'etichetta di testo e due elementi di modifica del testo in una riga orizzontale. L'etichetta non ha layout_weight specificato, quindi occupa lo spazio minimo richiesto per il rendering. Se il layout_weight di layout_weight di ciascuno dei due elementi di modifica del testo è impostato su 1, la larghezza rimanente nel layout principale verrà divisa in parti uguali tra loro (perché dichiariamo che sono ugualmente importanti).

Calcolo:

1a etichetta = 0 / (0 + 1 + 1)

2 casella di testo = 1 / (0 + 1 + 1)

3a casella di testo = 1 / (0 + 1 + 1)

Se, invece, la prima casella di testo ha un layout_weight di layout_weight di 1, e la seconda casella di testo ha un layout_weight di layout_weight di 2, quindi un terzo dello spazio rimanente verrà assegnato al primo e due terzi al secondo (perché rivendichiamo il secondo è più importante).

Calcolo:

1a etichetta = 0 / (0 + 1 + 2)

2 casella di testo = 1 / (0 + 1 + 2)

3a casella di testo = 2 / (0 + 1 + 2)

Articolo di origine


Pensalo in questo modo, sarà più semplice

Se hai 3 pulsanti e il loro peso è 1,3,1, funzionerà come una tabella in HTML

Fornire 5 porzioni per quella linea: 1 porzione per pulsante 1, 3 porzione per pulsante 2 e 1 porzione per pulsante 1

Considerare,


Si prega di guardare il peso di LinearLayout e il peso di layout di ciascuna vista. android: weightSum = "4" android: layout_weight = "2" android: layout_weight = "2" Loro layout_height sono entrambi 0px, ma non sono sicuro che sia rilevante

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

<fragment android:name="com.example.SettingFragment"
    android:id="@+id/settingFragment"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="2"
    />

<Button
    android:id="@+id/dummy_button"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="2"
    android:text="DUMMY"
    />
</LinearLayout>

aggiungendo alle altre risposte, la cosa più importante per farlo funzionare è impostare la larghezza (o l'altezza) del layout su 0px

android:layout_width="0px"

altrimenti vedrai spazzatura



layout_weight dice ad Android come distribuire i tuoi View in LinearLayout . Android calcola dapprima la proporzione totale richiesta per tutte le View che hanno un peso specificato e posiziona ciascuna View base alla frazione dello schermo che ha specificato di cui ha bisogno. Nel seguente esempio, Android vede che i TextView hanno un layout_weight di layout_weight di 0 (questo è l'impostazione predefinita) e gli EditText hanno un layout_weight di layout_weight di 2 ciascuno, mentre il Button ha un peso di 1 . Quindi Android assegna lo spazio "appena sufficiente" per visualizzare tvUsername e tvPassword e quindi divide il resto della larghezza dello schermo in 5 parti uguali, due delle quali sono assegnate a etUsername , due a etPassword e l'ultima parte a bLogin :

<LinearLayout android:orientation="horizontal" ...>

    <TextView android:id="@+id/tvUsername" 
    android:text="Username" 
    android:layout_width="wrap_content" ... />

    <EditText android:id="@+id/etUsername"
    android:layout_width="0dp"
    android:layout_weight="2" ... />

    <TextView android:id="@+id/tvPassword"
    android:text="Password"
    android:layout_width="wrap_content" />

    <EditText android:id="@+id/etPassword"
    android:layout_width="0dp"
    android:layout_weight="2" ... />

    <Button android:id="@+id/bLogin"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:text="Login"... />

</LinearLayout>

Sembra:
e


Con layout_weight è possibile specificare un rapporto di dimensioni tra più viste. Ad esempio, hai una MapView e una table che dovrebbe mostrare alcune informazioni aggiuntive sulla mappa. La mappa dovrebbe usare 3/4 dello schermo e la tabella dovrebbe usare 1/4 dello schermo. Quindi imposterai il layout_weight della map su 3 e il layout_weight della table su 1.

Per farlo funzionare devi anche impostare l'altezza o la larghezza (a seconda dell'orientamento) su 0px.







android-widget