Различия в размере шрифта между разрешениями

#android

#Android

Вопрос:

Я разработал свое приложение на WVGA800 с разрешением 240 hdpi. Размер текста на некоторых моих кнопках был слишком мал, поэтому мне пришлось изменить их на 50sp. Это выглядит хорошо на том, на чем я его разработал, но при тестировании на QVGA с разрешением 120 ldpi и HVGA с разрешением 160 mdpi текст слегка обрезан. Кроме того, при тестировании на версии 3.0 текст получается слишком маленьким. Как вы с этим справляетесь?

Редактировать: На самом деле это проблема только в 1 макете. Макет содержит вложенные линейные описания с весом = 1, так что каждая строка имеет одинаковый размер и заполняет экран. Layout_weight для LinearLayout, чтобы он растягивался, чтобы соответствовать экрану по вертикали. И для каждой кнопки, чтобы они растягивались, заполняя экран по горизонтали.

 <LinearLayout>
   <ViewFlipper>
      <LinearLayout>
         <LinearLayout android:layout_weight="1">
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
         </LinearLayout>
         <LinearLayout android:layout_weight="1">
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
         </LinearLayout>
         <LinearLayout android:layout_weight="1">
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
         </LinearLayout>
         <LinearLayout android:layout_weight="1">
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
            <Button android:layout_weight="1"></Button>
         </LinearLayout>
      </LinearLayout>
      <LinearLayout>
      </LinearLayout>      
   </ViewFlipper>
</LinearLayout>
  

Комментарии:

1. Вы используете dp вместо sp ?

2. Разве dp не используется для макета, а sp — для текста? Я использую sp.

3. может быть, вам стоит опубликовать свой макет, я думаю, что есть проблема…

4. Вы не должны использовать веса вложенного макета. Это снижение производительности. Для этого вы можете использовать tablelayout, gridlayout или относительный макет.

Ответ №1:

Вам нужно установить размеры текста с помощью «dp» — смотрите здесь: http://developer.android.com/guide/practices/screens_support.html

Пиксель, не зависящий от плотности (dp) Виртуальная единица измерения пикселей, которую приложения могут использовать при определении своего пользовательского интерфейса для выражения размеров макета или положения независимо от плотности.

Пиксель, не зависящий от плотности, эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, базовой плотности, принятой платформой (как описано далее в этом документе). Во время выполнения платформа прозрачно обрабатывает любое масштабирование необходимых единиц dp, основываясь на фактической плотности используемого экрана. Преобразование единиц dp в пиксели экрана простое: пиксели = dps * (плотность / 160). Например, на экране с разрешением 240 точек на дюйм 1 dp будет равен 1,5 физическим пикселям. Настоятельно рекомендуется использовать dp-единицы для определения пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на разных экранах.

Комментарии:

1. Я не вижу разницы. В любом случае, кажется, проблема с одновременным отображением более 12 кнопок на экране.

2. для шрифтов не рекомендуется использовать dp. Шрифты должны быть с размерами sp.

Ответ №2:

В любом случае вы можете указать отдельные размеры шрифта для отдельных экранов, используя запись dimens в value.xml . Иметь разные папки для разных размеров экрана (значения -большие, значения-xlarge и т.д.)