Пользовательский заголовок панели действий в Android не центрируется?

#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. Спасибо за ответ, но я попробовал это, и он все еще находится в том же положении. У вас есть другие идеи?