2015-05-27 17 views
5

Questo è il mio primo post qui. Ho appena imparato la programmazione Android e ho raggiunto questo problema. Ho cercato un po 'e trovato alcune soluzioni ma non ho potuto far funzionare il mio codice. Quindi voglio sapere quale parte del mio codice o implementazione è sbagliata.Come rendere proporzionale il layout di Android indipendentemente dalle dimensioni e dall'orientamento dello schermo

Quindi, il problema è che voglio creare un layout che rimanga la stessa proporzione su diverse dimensioni e orientamento dello schermo. Ecco il mio codice: "Hai bisogno di almeno 10 reputazione di inviare le immagini"

activity_main.xml

<LinearLayout 
 
    xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:tools="http://schemas.android.com/tools" 
 
    android:layout_width="fill_parent" 
 
    android:layout_height="fill_parent" 
 
    android:baselineAligned="false" 
 
    android:orientation="vertical"> 
 

 
    <LinearLayout 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="150dp" > 
 
     <TextView 
 
      android:layout_weight="1" 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:gravity="left" 
 
      android:id="@+id/textView1"/> 
 
     <TextView 
 
      android:layout_weight="1" 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:gravity="right" 
 
      android:id="@+id/textView2"/> 
 
    </LinearLayout> 
 

 
    <LinearLayout 
 
     android:layout_weight="1" 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="fill_parent" > 
 
     <TextView 
 
      android:layout_weight="1" 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:id="@+id/textView3"/> 
 
    </LinearLayout> 
 

 
    <LinearLayout 
 
     android:layout_weight="1" 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="fill_parent" > 
 
     <TextView 
 
      android:layout_weight="1" 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:gravity="left" 
 
      android:id="@+id/textView4"/> 
 

 
     <TextView 
 
      android:layout_weight="1" 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:gravity="center" 
 
      android:id="@+id/textView5"/> 
 

 
     <TextView 
 
      android:layout_weight="1" 
 
      android:layout_width="0dp" 
 
      android:layout_height="fill_parent" 
 
      android:gravity="right" 
 
      android:id="@+id/textView6"/> 
 
    </LinearLayout> 
 

 
    <SeekBar 
 
     android:layout_width="fill_parent" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/seekBar" 
 
     android:max="255"/> 
 
</LinearLayout>

non posso postare screenshot in questo momento, perché ha detto

Quindi, voglio dividere lo schermo di 3 parti in verticale e dividere la parte superiore di 2 orizzontalmente e la parte inferiore di 3 orizzontalmente e mantenere la loro proporzione indipendentemente dalle dimensioni dello schermo, dalla risoluzione e dall'orientamento.

L'unica parte che non ha funzionato è il blocco superiore, sul codice l'ho impostato su android:layout_height="150dp" perché il layout in qualche modo è rotto se li ho impostati su android:layout_height="fill_parent". Ma questo non rende il layout proporzionale se cambio l'orientamento. Qualsiasi aiuto sarà apprezzato.

Grazie.

+0

Si dovrebbe leggere su 'LinearLayout' &' peso'! –

+0

se si desidera un layout 150 dpi rispetto al motivo per cui si utilizza il concetto di peso per altri layout? –

+0

Ciao, grazie mille del suggerimento. Ho trovato il problema ora. Stavo impostando quelli su 'android: layout_height =" fill_parent "' ma ho dimenticato di impostare il 'peso'. Scusa, errore di un principiante. – Wellsen

risposta

2

Utilizzando layout_weight sui tre linearLayout e assegnando a ciascuno lo stesso valore, lo schermo sarà diviso verticalmente a 3 indipendentemente dalle dimensioni dello schermo. Inoltre, assegnare l'altezza 0dp: android:layout_height="0dp"

L'XML completo sarebbe:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:baselineAligned="false" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:gravity="left" /> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:gravity="right" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" > 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" > 

     <TextView 
      android:id="@+id/textView4" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:gravity="left" /> 

     <TextView 
      android:id="@+id/textView5" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:gravity="center" /> 

     <TextView 
      android:id="@+id/textView6" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:gravity="right" /> 
    </LinearLayout> 

    <SeekBar 
     android:id="@+id/seekBar" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:max="255" /> 

</LinearLayout> 
+0

Ciao, grazie mille, contrassegnato come risposta. – Wellsen

2

Puoi anche avere la dimensione dello schermo in modo pragmatico e impostare l'altezza/peso base alle proprie esigenze.

Display display = getWindowManager().getDefaultDisplay(); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    display.getMetrics(outMetrics); 

    float density = getResources().getDisplayMetrics().density; 
    float dpHeight = outMetrics.heightPixels/density; 
    float dpWidth = outMetrics.widthPixels/density; 
4

Sembra che le persone abbiano già risposto alla tua domanda mentre lo stavo facendo. enter image description here Tuttavia, sto postando questa risposta nel caso abbiate ancora bisogno di aiuto. Questa immagine contiene i pesi che devi assegnare ai tuoi layout, espressi graficamente. Per favore scusate qualche mancanza di allineamento, l'ho fatto di fretta.

7
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#555555"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     android:background="#555555"> 
     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:text="part1" 
      android:background="#008000"/> 
     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:text="part2" 
      android:background="#0000FF"/> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#ffffff"></LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:orientation="horizontal" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="#000000"> 
     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:text="part1" 
      android:background="#008000"/> 
     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:text="part2" 
      android:background="#A9F114"/> 
     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:text="part3" 
      android:background="#B4155D"/> 
    </LinearLayout> 
</LinearLayout> 
Problemi correlati