Percentuale fissa del layout sullo schermo
-
12-12-2019 - |
Domanda
Nella mia app, ho 2 layout lineari: uno in alto, uno in basso.
Mi piacerebbe che qualunque sia all'interno di questi layout , il layout della parte superiore occupa il 60% dell'altezza dello schermo e il layout del 40% in basso.
Ecco il mio codice XML:
.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.6"
android:orientation="vertical"
android:id="@+id/layout_top">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="0.4"
android:id="@+id/layout_bottom">
</LinearLayout>
</LinearLayout>
Quando questi layout sono vuoti, nessun problema, hanno la buona proporzione.
Il problema è che se metto un piccolo elenco nel layout superiore per ad esempioQuindi il layout prenderà la dimensione del ListView e non presterà la proporzione del 60/40%.
Mi piacerebbe che anche se il mio elenco è piccolo (solo 3 elementi per ad esempio), il layout preserve è il 60% e quindi metti un po 'di spazio vuoto sotto la mia lista di lista.
Ho provato a cambiare android:layout_height
a match_parent
ma non cambia nulla.
Soluzione
prova a usare questo layout funziona per me
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="6"
android:orientation="vertical"
android:id="@+id/layout_top"
android:background="#FF0000">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="vertical"
android:layout_weight="4"
android:id="@+id/layout_bottom"
android:background="#FF00FF">
</LinearLayout>
</LinearLayout>
.
Il trucco è quello di impostare un layout_height="0dip"
invece di wrap_content in modalità verticale e layout_with="0dip"
invece di wrap_content in modalità orizzontale è possibile utilizzare la cartella Layout-Land per questo.
Altri suggerimenti
Layout_weight Specificare spazio extra nel layoutFot la vista.Dovresti provare a misurare prima il tuo schermo come:
Display display = ((WindowManager)
getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getHeight();
.
E poi fare un po 'di calcolo come la larghezza * 0.6 e 0.4, in questo modo il tuo layout avrà sempre 60 40 rapporto.
Spero che questo aiuti
prova layout_height = 0dp
in entrambi i bambini LinearLayouts
.Sta accadendo perché hai generatodicetagcode che probabilmente sta prevalere l'effetto wrap_content
.
Semplicemente nel layout genitore, sostituire android:layout_weight="1.0"
con android:weightSum="1.0"
funziona impostando la somma del peso del layout genitore e dei pesi dei layout dei bambini.Il peso dei bambini dovrebbe essere uguale alla somma del peso del genitore.Dai un'occhiata a questo http://blog.stylingandroid.com/archives/312