2015-06-05 7 views
2

У меня есть LinearLayout с 6 кнопками. При разрешении 4,7 "кнопки размера почти идеальны, но на устройствах с более высоким разрешением они не занимают весь экран, а на устройствах с меньшим разрешением не все видны. Не могли бы вы объяснить, как я могу заставить кнопку выглядеть одинаково на устройствах с различными разрешениями экрана?Размер кнопок в зависимости от разрешения экрана

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

    <TextView 
     android:id="@+id/tvBody" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/tv_company" 
     android:layout_marginLeft="30dp" 
     android:textColor="#002060" 
     android:layout_marginTop="20dp" 
     android:textSize="15sp" 
     > 
    </TextView> 
    <Button 
     android:id="@+id/button_operations" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/gradient_blue" 
     android:drawableLeft="@drawable/ic_purchase" 
     android:paddingLeft="10dp" 
     android:paddingTop="5dp" 
     android:paddingBottom="5dp" 
     android:gravity="left|center" 
     android:text=" oper1" 
     android:layout_marginTop="15dp" 
     android:layout_marginLeft="30dp" 
     android:layout_marginRight="30dp" 
     android:textColor="#001B51" 
     android:textSize="30sp" 
     android:textStyle="bold" 
     /> 

    ....... //4 more buttons 

    <Button 
     android:id="@+id/button_exit" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/gradient_blue" 
     android:paddingLeft="10dp" 
     android:drawableLeft="@drawable/ic_exit" 
     android:gravity="left|center" 
     android:text=" Exit" 
     android:paddingTop="5dp" 
     android:paddingBottom="5dp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="30dp" 
     android:layout_marginRight="30dp" 
     android:textColor="#001B51" 
     android:textSize="30sp" 
     android:textStyle="bold"/> 
</LinearLayout> 
+1

использовать различные dimens.xml и добавить в соответствующую папку ресурсов разрешения – 3xplore

+0

использовать GridLayout –

+0

может быть примером? –

ответ

2

Если вы хотите, чтобы каждые один, чтобы занять равную часть оставшейся высоты после первого TextView, попытайтесь использовать атрибут LinearLayout's layout_weight и установить высоту каждого Button к fill_parent как так :

<Button 
    android:id="@+id/button_exit" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1" 
    ... /> 

Если каждый Button имеет равный макет, он будет заполнять одну и ту же часть доступного пространства. Поскольку TextView невзвешен, сначала он занимает нужное место, а взвешенные кнопки заполнят оставшееся пространство вместе.

Вы также можете указать разные размеры текста, основанные на плотности экрана (и, возможно, также использовать стили, чтобы уменьшить дублирование всех ваших параметров макета Button's), но это немного выходит за рамки вашего первоначального вопроса.

Edit: Чтобы ответить на ваш вопрос в комментариях о том, как обеспечить различные размеры текста для различных плотностей с использованием различных ресурсов ...

Перейти в values/dimens.xml и добавить <dimen name="main_button_text_size">30sp</dimen> на новой строке.

Теперь перейдите в папку ресурсов для увеличения размера экрана, скажем values-sw720dp/dimens.xml (примечание: создать папку/файл в корневом каталоге вашего res каталога, если он не существует), а также добавить <dimen name="main_button_text_size">40sp</dimen> на новой строке.

Теперь в вашем основном файле макета установите для ваших кнопок textSize атрибут @dimen/main_button_text_size.

Теперь вы только что установили разные значения для одного и того же TextView в зависимости от размера экрана, на котором он отображается.

Есть и другие папки с данными, https://stackoverflow.com/a/21324209/1426565 дает довольно хорошее объяснение, если вы хотите узнать больше.

+0

_Вы можете также указать разные размеры текста на основе плотности экрана_ - как я могу это сделать? –

+0

Ответил как отредактировал, потому что я не думаю, что он поместится здесь – Guardanis

+0

Я иду по этому пути. Спасибо всем. –

0

Если вы используете Android Studio, есть опция называется:

Preview All Screen Sizes на просмотр из Android Studio верхней части панели инструментов предварительного просмотра.

Итак, вот что вам нужно:

http://developer.android.com/guide/practices/screens_support.html

Диапазон экранов поддерживается:

Начиная с Android 1.6 (API Level 4), Android обеспечивает поддержку кратному размеры экрана и плотность, отражающие множество различных конфигураций экрана , которые могут иметь устройство.Вы можете использовать функции системы Android, чтобы оптимизировать пользовательский интерфейс приложения для каждой конфигурации экрана и обеспечить, чтобы ваше приложение не только визуализировало корректно, но и обеспечило наилучший возможный пользовательский интерфейс на на каждом экране.

  • ldpi (низкий) ~ 120dpi
  • MDPI (среда) ~ 160dpi
  • ИПЧР (высокий) ~ 240dpi
  • xhdpi (сверхвысокого) ~ 320dpi
  • xxhdpi (экстра- сверхвысокий) ~ 480dpi
  • xxxhdpi (экстра-экстра-экстра-высокий) ~ 640dpi

Finaly Ответ:http://developer.android.com/guide/practices/screens_support.html#support

вы должны создать файл макета так же, как показано на рисунке ниже для каждого API,:

enter image description here

  • Рез/макет/layout.xml
  • Рез/layout- small/layout.xml
  • res/layout-large/layout.xml
  • res/layout-xlarge/layout.xm л
  • разреша/макет земля/layout.xml
  • разреш/макет малого участок/layout.xml
  • разрешение/макет большой участок/layout.xml
  • разреш/макет-xlarge- земля/макет.xml

и вам нужно спроектировать для каждого экрана.

1

изменить все кнопки на нулевую высоту

android:layout_height=0dp" 

и добавить вес к ним

android:layout_weight="1" 

, что сделает все (кнопки) просмотра масштабироваться в равной степени occuppy всего LinearLayout.

ps .: игнорировать все эти разговоры об использовании разных макетов или разных размеров.

+0

_ps .: игнорировать все эти разговоры об использовании разных макетов или разных измерений. _ - нельзя игнорировать различные размеры текстового размера. –

+0

@AndrewEfremov - это важный инструмент для разработчиков Android, но не подходит для вашего основного вопроса. – Budius

Смежные вопросы