2016-06-27 2 views
0

Мои проблемы состоят в том, что все эти виды имеют разное левое заполнение, и когда я помещаю их один под другим, он выглядит беспорядочным.Выравнивание материалов edittexts, textviews, checkboxes и т. Д.

Как исправить это? Есть ли классный способ решить эту проблему?

Я попытался добавить несколько дополнительных paddings, например 2dp для edittexts и 4dp для текстовых просмотров, но, похоже, это не работает из-за разных прокладок на разных устройствах.

Пример (в Googles официальных приложениях это не так): enter image description here Здесь ничего особенного в моих макетах, просто просматривает без каких-либо дополнительных атрибутов.

<?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="wrap_content" 
    android:orientation="vertical"> 

    <android.support.design.widget.TextInputLayout 
     android:id="@+id/input_layout_password" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="0dip"> 

     <EditText 
      android:id="@+id/text" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/network_password" 
      android:inputType="textPassword"/> 

    </android.support.design.widget.TextInputLayout> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/show_password"/> 

</LinearLayout> 
+0

Поделитесь своим расположением пожалуйста. –

ответ

1

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

<LinearLayout 
    ... 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:paddingTop="16dp" 
    android:paddingBottom="16dp"> 

    <!--Your form inputs--> 

</LinearLayout> 

У вновь созданного мероприятия уже есть прокладка 16dp вокруг корневой компоновки.

Значение «16dp» должно быть сохранено как dimen, а не жестко закодированное.

+0

Да, вот как это делается в моих действиях/диалогах. Проблема в том, что каждый встроенный материальный контроль уже имеет разные дополнения. – JaLoveAst1k

4

Существует не крутой способ сделать это. Следующая стратегия работает лучше для меня:

  • Добавить все Просмотров на мой XML
  • выполнения Material Cue на моем телефоне, чтобы нарисовать сетку
  • регулировать отступы/поля, пока все не соответствует сетке (очень быстро с Instant Run)
  • проверить на обрезанные эффекты пульсации. При необходимости добавьте android:clipChildren="false" или android:clipToPadding="false"

0

Я рекомендовал бы управлять поля и отступы таким образом:

  1. Под /res/ создать несколько values папку в зависимости от плотности экрана (например, values-w820dp), а затем создать dimens.xml под этими папками с соответствующими значениями для каждой плотности экрана. follow this guide.
  2. Если возможно, всегда использует RelativeLayout вместо LinearLayout. Если ваша проблема - это просто выравнивание, вы всегда можете использовать атрибуты RelativeLayout, например android:layout_alignRight="@id/id_of_view", для управления выравниваниями.
Смежные вопросы