Tôi muốn hiển thị menu mục bổ sung trên thanh công cụ (AppCompat-v7: 22.1.1), bên dưới là menu_main.xml của tôi.Tình trạng lạ này xảy ra như thế nào khi hiển thị biểu tượng mục trình đơn trong menu mục bổ sung trên thanh công cụ?
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@mipmap/ic_menu_search"
android:orderInCategory="100"
android:actionViewClass="android.widget.SearchView"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_group_chat"
android:title="@string/menu_group_chat"
android:icon="@mipmap/ic_menu_groupchat" />
<item
android:id="@+id/menu_add_friend"
android:title="@string/menu_add_friend"
android:icon="@mipmap/ic_menu_add_friend" />
Sau khi chạy ứng dụng của tôi, biểu tượng của mục menu không hiển thị, sau đó tôi đã cố gắng solution này, thêm một phương pháp ghi đè onMenuOpened() trong Activty tôi (kéo dài từ AppCompatActivity),
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if(menu!=null){
if(menu.getClass().getSimpleName().equals("MenuBuilder")){
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
Nhưng sau khi chạy bản trình diễn này, tôi thấy biểu tượng vẫn không được hiển thị.
Từ reported issue này, tôi biết rằng AppCompatActivity.onMenuOpened không được gọi nữa trong 22.x, nhưng nó lẻ rằng khi tôi bấm phím menu phần cứng trong Genymotion, menu xuất hiện ở phía dưới và với biểu tượng,
sau khi đóng trình đơn, tôi bấm vào nút tràn trong thanh công cụ một lần nữa, các biểu tượng trong menu xuất hiện,
mức độ lạ! Tại sao điều này xảy ra?
Nó có thể là một vấn đề của hương vị nhưng tôi nghĩ rằng 'nếu (menu.getClass(). Equals (MenuBuilder.class))' là hơn tao nhã hơn 'nếu (menu.getClass(). getSimpleName(). bằng ("MenuBuilder")) '. Các chuỗi ít mã hóa càng tốt IMHO ;-) – Matthias
Bỏ qua nhận xét của tôi. Làm theo cách của bạn làm cho nó hoạt động cho cả MenuBuilder và AppCompat của Android. Công việc tốt! – Matthias
Điều này phải được chấp nhận làm câu trả lời. – Chitrang