2015-05-27 1 views
5

Это мой первый пост здесь. Я просто изучил Android-программирование и пришел к этой проблеме. Я немного искал и нашел некоторые решения, но не смог заставить мой код работать. Поэтому я хочу знать, какая часть моего кода или реализация неверна.Как сделать формат Android пропорциональным независимо от размера и ориентации экрана

Итак, проблема в том, что я хочу сделать макет, который будет оставаться той же пропорцией на разных размерах экрана и ориентации. Вот мой код: «Вы должны по крайней мере, 10 репутации размещать изображения»

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>

Я не могу отправить скриншот в данный момент, потому что он сказал

Итак, я хочу разделить экран на 3 части по вертикали и разделить верхнюю часть на 2 по горизонтали, а нижнюю часть на 3 по горизонтали и сохранить их пропорцию независимо от размера экрана, разрешения и ориентации.

Единственная часть, которая не работает, - это верхний блок, в коде я установил его в android:layout_height="150dp", потому что макет каким-то образом сломался, если я установил их на android:layout_height="fill_parent". Но это не делает пропорцию пропорциональной, если я изменю ориентацию. Любая помощь будет оценена.

спасибо.

+0

Вы должны прочитать о 'LinearLayout' &' weight'! –

+0

, если вы хотите расклад 150dp, чем вы используете концепцию веса для другого макета? –

+0

Привет, большое спасибо за подсказку. Я нашел проблему сейчас. Я настраивал их на 'android: layout_height =" fill_parent ", но забыл установить' weight'. Извините, новичок. – Wellsen

ответ

2

Используя layout_weight на трех linearLayout и присваивая каждому одно и то же значение, экран будет разделен по вертикали на 3 независимо от размера экрана. Кроме того, присвоить высоту 0dp: android:layout_height="0dp"

Полный 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="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

Привет, большое спасибо, отмеченный как ответ. – Wellsen

2

Вы также можете получить размер экрана прагматичны и установить высоту/вес, основанный на вашем требовании.

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

Кажется, что люди уже ответили на ваш вопрос, пока я это делал. enter image description here Тем не менее, я отправляю этот ответ, если вам все еще нужна помощь. Это изображение содержит веса, которые необходимо назначить вашим макетам, которые графически отображаются. Пожалуйста, извините за недостаток расстановки, я сделал это в спешке.

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>