40

Trong bản cập nhật mới, Google đã phát hành thư viện hỗ trợ API mới, hỗ trợ ActionBar ở cấp API 7+.android.support.v7 với `ActionBarActivity` không có menu nào hiển thị

tôi đã sử dụng ActionBarSherlock cho đến khi bản cập nhật này và tôi đã viết code để nạp đơn:

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

và menu file:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" android:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" android:showAsAction="always"></item> 
</menu> 

Để thiết lập các nút menu trên thanh hành động. Mã này hoạt động hoàn hảo với ActionBarSherlock. Nhưng khi tôi thay đổi thanh hành động sang thư viện hỗ trợ mới, các nút không được hiển thị trong thanh tác vụ. Ngay cả khi chúng được đặt là android:showAsAction="always". Và khi tôi gỡ lỗi mã, hàm menu.getSize() trả về 2 và điều đó là chính xác nhưng không có nút nào được hiển thị.

Tại sao các nút không được hiển thị trong thư viện hỗ trợ mới?

Trả lời

104

Thử nhấn nút MENU trên thiết bị hoặc trình mô phỏng của bạn và xem liệu chúng có xuất hiện trong tràn hay không.

Nếu có, thì vấn đề là <menu> XML cần thay đổi. Trình đơn XML hoạt động với ActionBarSherlock và thanh tác vụ API cấp 11+ gốc sẽ không hoạt động với thanh tác vụ của thanh tác vụ AppCompat.

XML đơn của bạn sẽ cần phải xem xét như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" 
> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" yourapp:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" yourapp:showAsAction="always"></item> 
</menu> 

Và bạn sẽ cần phải sử dụng cùng một yourapp tiền tố cho bất cứ thứ gì liên quan đến việc thanh hành động (ví dụ, yourapp:actionLayout).

Bạn có thể thấy điều này được bao gồm trong the action bar documentation.

+2

Vâng, vấn đề là 'xmlns: yourapp =" http://schemas.android.com/apk/res-auto "'. Đây là thay đổi đối với Hỗ trợ phiên bản 7? Nguyên nhân trong 'ActionBarSherlock' mã cũ của tôi hoạt động hoàn hảo – nrofis

+5

@nrofis: Tôi không biết tại sao AppCompat không thể sử dụng' android: showAsAction' theo cách ActionBarSherlock có thể. – CommonsWare

+0

Cảm ơn đây là một thay đổi nhỏ và kỳ lạ mà tôi đã bỏ qua! –

0

Tôi muốn thêm một chút để the answer.

Nếu bạn muốn xem cả văn bản và biểu tượng, hãy sử dụng withText trong showAsAction Tôi vừa thử nghiệm nó; khi tôi sử dụng always hoặc ifRoom mà không cần withText, tôi chỉ thấy một biểu tượng.

Các vấn đề liên quan