Intereting Posts
Запуск приложения в фоновом режиме, когда телефон в Doze Узнайте, является ли Android-устройство портретным или альбомным для нормального использования? Как фильтровать протоколирование (используя LOCAL_LOGV) Панель действий показывается некоторое время, прежде чем применять к ней пользовательский вид Android WebView не загружает кешированный веб-сайт, если нет соединения Дать прокладку с помощью setPadding с модулем dip unit not px Android реагирует на PN532 InListPassiveTarget Как различать сигнал тревоги между am и pm с помощью диспетчера аварийных сигналов? Android Studio создает debug apk, но не развертывает / запускает на устройстве Разрешение Firebase отклонено (чтение и запись) с помощью проверки подлинности Как изменить цвет рисованной фигуры в файле макета Жесткие диски, извлеченные из неправильной папки ресурсов при вращении Намерение уволиться при завершении вызова? Undefined ссылки, связывающие предварительно созданную общую библиотеку в Android с NDK Настройка textIsSelectable в TextView с эллипсисом marquee добавляет эллипс

Андроид: гравитация не работает на API 18+

У меня есть некоторые текстовые элементы в моем приложении, я не знаю, почему, но атрибут android:gravity не центрирует текстовое содержимое, где оно должно быть на устройствах, на которых запущен API 18+ (4.3+).

Существует код, который я использую в своем пользовательском TextView , это ребенок RelativeLayout:

 <com.package.custom.CustomTextFont android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/seekbar" android:layout_alignParentLeft="true" android:layout_alignTop="@+id/seekbar" android:layout_marginLeft="@dimen/margin_tiny_double" android:layout_toLeftOf="@+id/seekbar" android:gravity="center_vertical|left" android:paddingRight="@dimen/margin_tiny" android:text="@string/text1" android:textColor="@color/black" android:textSize="@dimen/size_text_normal" /> 

Этот код должен взять края этого TextView и выровнять его сверху и снизу и поместить его влево от SeekBar , это работает, но TextView становится большим, поэтому с android:gravity I центр текста в центр и Ушел от него сам. Он работает, но я не знаю, почему текст не центрирован в центре слева на устройствах с Android 4.3 и 4.4. Эта проблема может быть воспроизведена на реальных устройствах, а также на предварительном просмотре макета (графическом макете) Eclipse.

Есть ли какие-либо изменения в API 18+ или на android:gravity которой я не хватает?

PS: Я нацелен на API 19 в проекте и на AndroidManifest.xml

PS2: My TextView настраивается только для установки внешнего font.tff

Вот как это выглядит на API 17-

Введите описание изображения здесь

Это похоже на API 18+

Введите описание изображения здесь

Заранее спасибо!

= UPTADATE =

На моем манифесте я изменил android:targetSdkVersion на 17 вместо 19, и проблема исчезла, но это «трюк», а не решение, что я могу сделать, поскольку это может быть проблемой из API? И да, у меня есть последняя версия API 18 и 19 (сегодня, 01/30/2014).

Это похоже на известную проблему в API 18+:

https://code.google.com/p/android/issues/detail?id=59368 https://code.google.com/p/android/issues/detail?id=59700

Проблема возникает, когда TextView является частью прокручиваемого контейнера (например, ListView), заставляя представление игнорировать вертикальную гравитацию по некоторым причинам (некоторые источники полагают, что это связано с тем, что TextView является дочерним элементом RelativeLayout, хотя это было Мой опыт в том, что это может произойти, даже если такой макет не задействован).

Возможным обходным решением (хотя и не особенно элегантным) было бы обернуть TextView в LinearLayout. Затем вы можете использовать «layout_gravity» в TextView, чтобы центрировать его внутри LinearLayout, вместо того, чтобы полагаться на «гравитацию» (просто убедитесь, что wrap_content, поэтому сам текст правильно центрирован).

Например, в вашем примере:

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignBottom="@+id/seekbar" android:layout_alignParentLeft="true" android:layout_alignTop="@+id/seekbar" android:layout_toLeftOf="@+id/seekbar" android:layout_marginLeft="@dimen/margin_tiny_double" > <com.package.custom.CustomTextFont android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="left" android:paddingRight="@dimen/margin_tiny" android:text="@string/text1" android:textColor="@color/black" android:textSize="@dimen/size_text_normal" /> </LinearLayout> 

У этого метода есть недостаток добавления ненужного уровня в иерархию вашего представления, но в настоящее время это единственный способ обойти это (кроме возврата к более раннему уровню API).

Также см. Аналогичный вопрос: Android sdk 18 TextView gravity не работает вертикально

Высота вашего текста – «wrap_content», что означает, что высота текста будет такой же, как высота текста. Если вы измените фон текста на черный, может быть проще увидеть границы представления. Я предполагаю, что вы обнаружите, что текстовое представление не имеет такой высоты, как вы ожидаете.

Попробуйте установить высоту текста в match_parent. Вы можете обернуть текст в другое представление, если это необходимо, и, при необходимости, изменить его высоту.