3

Он отлично работает на 5.1, но не на 4.1.2AppCompatActivity кнопки пользовательских ActionBar не появляются на Android 4.1.2

Что мне не хватает?

Вот активность XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:myApp="http://schemas.android.com/apk/res-auto"> 
    <item android:id="@+id/transfer" 
     android:title="@string/transfer" 
     android:icon="@drawable/ic_transfer" 
     myApp:showAsAction="always" /> 
    <item android:id="@+id/refresh" 
     android:title="@string/refresh" 
     android:icon="@drawable/ic_refresh" 
     myApp:showAsAction="always" /> 
    <item android:id="@+id/about" 
     android:title="@string/about" 
     android:icon="@android:drawable/ic_menu_info_details" 
     android:orderInCategory="100" 
     myApp:showAsAction="never" /> 
    <item android:id="@+id/help" 
     android:title="@string/title_activity_help" 
     android:icon="@android:drawable/ic_menu_info_details" 
     android:orderInCategory="101" 
     myApp:showAsAction="never" /> 
    <item android:id="@+id/settings" 
     android:title="@string/settings" 
     android:icon="@android:drawable/ic_menu_info_details" 
     android:orderInCategory="102" 
     myApp:showAsAction="never" /> 
    <item android:id="@+id/search" 
     android:title="@string/search" 
     android:icon="@android:drawable/ic_menu_info_details" 
     android:orderInCategory="103" 
     myApp:showAsAction="never" /> 
    <item android:id="@+id/logout" 
     android:title="@string/logout" 
     android:icon="@android:drawable/ic_menu_info_details" 
     android:orderInCategory="104" 
     myApp:showAsAction="never" /> 
</menu> 

А вот мой класс активности (ведьма расширяет другую деятельность, которая расширяет AppCompatActivity):

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_activity, menu); 
    return true; 
} 

Я использую следующую AppCompat библиотеку:

'com.android.support:appcompat-v7:22.2.0' 
+0

Добавить файл макета my_activity – chain

ответ

6

Спасибо за Ваш ответ. Я сделал то, что эти два ответа предложил:

How to force use of overflow menu on devices with menu button

Actionbar not shown with AppCompat

Резюмируя решение:

  1. Я изменил "MYAPP" на "Compat" в XML-активности (фиксированный недостающее кнопки)
  2. Я добавил этот код

    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 
    } 
    

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

Сейчас он работает в обоих 5.1 и 4.1.2

+1

Добавление этого кода, я считаю, работает только с 'ActionBarSherlock'. –

+0

@ Jared Burrows Я не знаю о ActionBarSherlock, не пробовал. Но это, безусловно, работает с AppCompat. –

+0

Я думаю, что изменение «myApp» на «compat» в операции xml «исправлено». Однако я не уверен, я это видел раньше. Я уже перешел на «Панель инструментов». –

4

Вместо этого вы должны использовать панель инструментов.

это в вашем XML:

<android.support.v7.widget.Toolbar 
    android:id="@id/toolbar" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" /> 

Этот код идет в вашей деятельности:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (toolbar != null) { 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     getSupportActionBar().setTitle(getTitle()); 
    } 
} 

Чем вы просто надуть меню:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == android.R.id.home) { 
     onBackPressed(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

He не использует «Панель инструментов», и он только пытается сделать меню «переполнение». –

 Смежные вопросы

  • Нет связанных вопросов^_^