2014-10-29 36 views
34

Sau 2 ngày gặp khó khăn với Thanh công cụ 21 API mới và appCompat_v7, tôi nghĩ mình đã tìm thấy lỗi trên đó. Nếu bạn có 2 hành động trên thực đơn của bạn như thế này:Thanh công cụ AppCompat_v7 là thanh tác vụ không hiển thị các hành động 'luôn luôn' từ menu, nhưng Thanh công cụ API hiện

<item 
    android:id="@+id/action_test" 
    android:showAsAction="always" 
    android:icon="@drawable/ic_launcher" 
    android:title="@string/action_settings"/> 

<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_settings"/> 

và một thanh công cụ appCompat định nghĩa như thế này:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.toolbar.MainActivity" > 

    <android.support.v7.widget.Toolbar 
     android:layout_width="match_parent" 
     android:layout_height="52dp" 
     android:id="@+id/toolbar"> 
    </android.support.v7.widget.Toolbar> 

</RelativeLayout> 

sau khi lạm phát (hoặc thiết lập các phương pháp setSupportActionBar)

Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
toolbar.setTitle("esurance"); 
setSupportActionBar(toolbar); 

bạn sẽ nhận được menu thanh công cụ mà không cần biểu tượng hành động của bạn, nó sẽ hiển thị nó trên menu mục bổ sung.

Nhưng, nếu bạn sử dụng lớp Toolbar từ API 21, nó sẽ hiển thị hành động của bạn như định nghĩa về bố trí menu của bạn ...

<Toolbar 
    android:layout_width="match_parent" 
    android:layout_height="52dp" 
    android:id="@+id/toolbar"> 
</Toolbar> 

Có lẽ tôi đang thiếu một cái gì đó ở đây, nhưng cho đến nay, tôi đã không thể hiển thị các hành động bên ngoài menu mục bổ sung bằng cách sử dụng appCompat. Bất kỳ trợ giúp về điều này sẽ được nhiều đánh giá cao.

enter image description here

Trả lời

77

mỗi sự Action Bar training, bạn phải sử dụng các app:showAsAction thuộc tính chứ không phải là thuộc tính android:showAsAction:

Chú ý rằng thuộc tính showAsAction trên sử dụng một không gian tên tùy chỉnh được xác định trong thẻ <menu>. Điều này là cần thiết khi sử dụng bất kỳ thuộc tính XML nào được xác định bởi thư viện hỗ trợ, bởi vì các thuộc tính này không tồn tại trong khung công tác Android trên các thiết bị cũ hơn. Vì vậy, bạn phải sử dụng không gian tên của riêng bạn làm tiền tố cho tất cả các thuộc tính được định nghĩa bởi thư viện hỗ trợ.

Vì vậy, tập tin thực đơn của bạn sẽ giống như thế:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 
    <item 
     android:id="@+id/action_test" 
     app:showAsAction="always" 
     android:icon="@drawable/ic_launcher" 
     android:title="@string/action_settings"/> 

    <item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     app:showAsAction="never" 
     android:title="@string/action_settings"/> 
</menu> 
+0

Trong trường hợp của tôi điều này không hoạt động nhưng android: showAsAction = "always" nó hoạt động. Tôi không thể hiểu tại sao điều này không hoạt động. –

+6

@HarshvardhanTrivedi Đó cũng là trường hợp của tôi. Nhưng may thay tôi đã tìm ra giải pháp: trong 'onCreateActionMode' không sử dụng' mode.getMenuInflater() ', nhưng sử dụng' getMenuInflater() 'từ' ActionBarActivity'. – yuku

+0

@yuku của bạn là câu trả lời đúng. – agirardello

3

đặt

xmlns: Ứng dụng = "http://schemas.android.com/apk/res-auto" int thẻ menu

như thế này

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

sau đó sử dụng app:showAsAction = "always"

Hãy nhớ rằng sử dụng app:showAsAction trong tất cả các mục trình đơn không android:showAsAction

`

3

trước hết là sử dụng app:showAsAction thay vì android:showAsAction (như @ianhanniballake) sau đó trong onCreateActionMode sau Lạm phát thực đơn của bạn setShowAsAction trong mã như thế này

@Override 
public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
mode.getMenuInflater().inflate(R.menu.your_menu_name, menu); 
menu.findItem(R.id.your_first_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
menu.findItem(R.id.your_second_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
return true; 
} 

tôi đã có cùng một vấn đề như vậy sau khi làm việc trên nó những dòng mã hoạt động tốt cho tôi.

+0

câu trả lời này chỉ làm việc cho tôi <3 thx –

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