Почему существуют расхождения в макете между предварительным просмотром дизайна в Android Studio и отображаемым пользовательским интерфейсом в эмуляторе Android?

У меня есть несколько связанных с макетом вопросов относительно скриншотов ниже.

Моя версия Android Studio работает на OS X Yosemite. Вот детали версии:

О Android Studio

Вот скриншот макета на вкладке "Дизайн" в Android Studio:

Вот скриншот визуализированного пользовательского интерфейса в эмуляторе Android:

Вот фактический файл XML для макета активности:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:layout_marginTop="15sp"
    android:layout_marginLeft="5sp"
    android:layout_marginRight="5sp">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_marginRight="5sp">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/company"
            android:gravity="center"
            android:textSize="@dimen/label_font_size" />
        <EditText
            android:id="@+id/company"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:textStyle="bold"
            android:textSize="@dimen/entry_font_size"
            android:gravity="center"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_marginLeft="5sp">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/team"
            android:gravity="center"
            android:textSize="@dimen/label_font_size" />
        <EditText
            android:id="@+id/team"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:textStyle="bold"
            android:textSize="@dimen/entry_font_size"
            android:gravity="center"/>
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:layout_marginTop="20sp"
    android:layout_marginLeft="5sp"
    android:layout_marginRight="5sp">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/web_service"
        android:gravity="center"
        android:textSize="@dimen/label_font_size" />
    <EditText
        android:id="@+id/web_service"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:textStyle="bold"
        android:textSize="@dimen/entry_font_size"
        android:gravity="center"/>
</LinearLayout>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:layout_marginTop="20sp"
    android:layout_marginLeft="5sp"
    android:layout_marginRight="5sp">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_marginRight="5sp">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/service_start"
            android:textSize="@dimen/label_font_size"
            android:gravity="center"
            />
        <TimePicker
            android:id="@+id/service_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:timePickerMode="spinner"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_marginLeft="5sp">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/service_end"
            android:textSize="@dimen/label_font_size"
            android:gravity="center"
            />
        <TimePicker
            android:id="@+id/service_end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:timePickerMode="spinner"/>
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:layout_marginTop="20sp"
    android:layout_marginLeft="5sp"
    android:layout_marginRight="5sp">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:text="@string/subscriber_id"
        android:gravity="center"
        android:textSize="@dimen/label_font_size" />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:weightSum="100">
        <EditText
            android:id="@+id/subscriber_id_1of4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="45"
            android:inputType="text"
            android:textStyle="bold"
            android:textSize="@dimen/entry_font_size"
            android:gravity="center"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="10"
            android:text="-"
            android:gravity="center"
            android:textSize="@dimen/label_font_size" />
        <EditText
            android:id="@+id/subscriber_id_2of4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="45"
            android:inputType="text"
            android:maxLength="8"
            android:textStyle="bold"
            android:textSize="@dimen/entry_font_size"
            android:gravity="center"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:weightSum="100">
        <EditText
            android:id="@+id/subscriber_id_3of4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="45"
            android:inputType="text"
            android:maxLength="8"
            android:textStyle="bold"
            android:textSize="@dimen/entry_font_size"
            android:gravity="center"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="10"
            android:text="-"
            android:gravity="center"
            android:textSize="@dimen/label_font_size" />
        <EditText
            android:id="@+id/subscriber_id_4of4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="45"
            android:inputType="text"
            android:maxLength="8"
            android:textStyle="bold"
            android:textSize="@dimen/entry_font_size"
            android:gravity="center"/>
    </LinearLayout>
</LinearLayout>

ВОПРОСЫ:

  1. Почему счетчик AM / PM не отображается в эмуляторе для TimePicker?
  2. Почему в эмуляторе вертикаль намного длиннее, чем на вкладке "Дизайн" в Studio?
  3. Как сделать макет в Studio, устойчивый к различным размерам экрана (то есть форм-факторам) для разных устройств?

1 ответ

Решение

Два TimePickers были слишком широки для моего экрана телефона. Похоже, что средство визуализации Design (в Studio) и средство визуализации пользовательского интерфейса (в эмуляторе) по-разному справились с перенапряжением, т. Е. Вкладка Design просто усекала счетчик AM / PM (см. Мой предыдущий скриншот), а эмулятор оставил полностью вытащил спиннер AM / PM и толкнул оставшееся содержимое еще ниже. Эта разница учитывает расхождения, появляющиеся в визуализированных выходных данных.

Чтобы решить эту проблему, я просто заменил TimePickers на кнопки, которые отображают TimePickerDialog при активации. Визуализированный пользовательский интерфейс теперь идентичен как в эмуляторе, так и в представлении "Дизайн" в Studio. Вот скриншот Эмулятора, например:

Другие вопросы по тегам