#android #android-layout #android-actionbar
#Android #android-макет #android-actionbar
Вопрос:
У меня есть пользовательский макет для моей панели действий. Это линейное описание с одним текстовым представлением с сегодняшней датой. Текстовое представление идеально центрируется на устройствах 4.0 и даже на эмуляторе 3.0. Но в эмуляторе 3.2 он немного смещен от центра:
Я делаю это в своей основной деятельности:
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getActionBar().setCustomView(R.layout.actionbar_custom);
dateTextView = (TextView) findViewById(R.id.dateTextView);
и вот actionbar_custom.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center_vertical|center_horizontal" >
<TextView
android:id="@ id/dateTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_vertical|center_horizontal" />
</LinearLayout>
Похоже, что кнопка переполнения занимает пространство макета и может быть причиной того, что дата не центрируется. Но на моих устройствах 4.0 значок переполнения присутствует, но дата идеально центрирована, поэтому я в замешательстве.
Обновить:
Я думаю, что нашел источник проблемы. Я использую обходной путь в своем классе приложений, чтобы заставить кнопку переполнения отображаться на устройствах с клавишей меню:
try
{
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null)
{
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
}
catch (Exception ex)
{
// Ignore
}
Похоже, что это заставляет значок переполнения отображаться в собственном макете.
Есть ли способ разместить мой TextView внутри общего родительского макета панели действий на этих устройствах? Таким образом, я мог бы центрировать TextView внутри этого.
Комментарии:
1. @Raghunandan В эмуляторе с включенными «аппаратными ключами» (например, в моем эмуляторе 3.0) значок переполнения отсутствует, но текст центрируется.
2. версии Android 3.X составляют менее 0,1% в соответствии с панелями мониторинга. Не тратьте свое время developer.android.com/about/dashboards /…
3. @LordRaydenMK я действительно испытываю искушение, потому что настройка макетов панели действий для устройств 3.x — это не что иное, как кошмар 🙂
4. У меня это не работает.
Ответ №1:
Самым простым решением было бы использовать относительный макет и добавить centerInParent = «true» в ваш textview.
Комментарии:
1. Спасибо за ответ, но я попробовал это, и он все еще находится в том же положении. У вас есть другие идеи?