Пользовательские кнопки панели действий AppCompatActivity не отображаются на Android 4.1.2
Он прекрасно работает на 5.1, но не на 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>
А вот мой класс activity (witch расширяет другое действие, которое расширяет 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'
2 ответа:
Спасибо за ваш ответ. Я сделал то, что предлагали эти два ответа:
Как принудительно использовать меню переполнения на устройствах с кнопкой Меню
Панель действий не отображается с помощью AppCompat
Чтобы суммировать решение:
- я изменил "myApp" на "compat" в xml-файле activity (исправлены отсутствующие кнопки)
Я добавил этот код
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
Вместо этого следует использовать панель инструментов.
Поместите это в свой 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); }