Cách thêm mục thả xuống trên thanh tác vụ


82

Trong ứng dụng Android Honeycomb, tôi sử dụng Tab làm kiểu điều hướng. Tôi muốn thêm một mục bên cạnh nút tràn, nhưng tôi muốn mục đó là danh sách thả xuống và người dùng sẽ có thể chọn một tùy chọn ở đó, nhưng không liên quan đến điều hướng. Cách dễ nhất là gì vì tôi đang sử dụngmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Có thể làm điều đó mà không sử dụng chế độ xem tùy chỉnh không?


Câu trả lời:


221

Lựa chọn đầu tiên:

menu / options.xml:

<item
    android:icon="@drawable/ic_menu_sort"
    android:showAsAction="ifRoom">
    <menu>
        <item
            android:id="@+id/menuSortNewest"
            android:title="Sort by newest" />
        <item
            android:id="@+id/menuSortRating"
            android:title="Sort by rating" />
    </menu>
</item>

Sự lựa chọn thứ hai:

menu / options.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuSort"
        android:showAsAction="ifRoom"
        android:actionLayout="@layout/action_sort"  />
</menu>

layout / action_sort.xml:

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ic_menu_refresh"
    android:entries="@array/order" />

Tài liệu cho tài nguyên menu - http://developer.android.com/guide/topics/resources/menu-resource.html


2
Những menu con đó là một mẹo hay! Đã tiết kiệm cho tôi hàng giờ nghiên cứu và làm việc, cảm ơn!
damaxxed

7
làm cách nào để phản hồi lại một cú nhấp chuột của vòng xoay?
gregm

2
Điều này không hoạt động cho Android 2.2. Ứng dụng đang bị lỗi. Bạn đã có một giải pháp?
tobias,

3
Sử dụng ActionBarSherlock ... họ đã không giới thiệu ActionBar trở lại trong Android 2.2 và do đó ActionBarSherlock cho phép bạn cập nhật các tính năng này. actionbarsherlock.com
edwoollard

4
@Sandeep Maram Bạn có thể tải spinner bằng cách Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView()vào onCreateOptionsMenu(). Sau đó đặt mục chọn người nghe.
Lahiru Chandima

34

Hoàn toàn là câu trả lời tốt nhất và đơn giản nhất mà tôi tìm thấy cho đến nay là ở đây .

Về cơ bản, không cần bố cục tùy chỉnh trong trường hợp này. Chỉ cần đặt actonViewClass:

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

  <item android:id="@+id/spinner"
    yourapp:showAsAction="ifRoom"
    yourapp:actionViewClass="android.widget.Spinner" /> <== this is all that's required
</menu>

Và sau đó xử lý nó trong onCreateOptionsMenu, như thường lệ:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    MenuItem item = menu.findItem(R.id.spinner);
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); // get the spinner
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(onItemSelectedListener); 

Đây là giải pháp đơn giản và sạch sẽ nhất. Tín dụng cho François Poyer, tác giả gốc.


Đã kiểm tra và phê duyệt.
Gus Costa

0

Nó sẽ chỉ hoạt động dưới dạng menu thả xuống

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!--<item-->
    <!--android:id="@+id/save_contact"-->
    <!--android:icon="@drawable/edit_new"-->
    <!--android:title="Save Contact"-->
    <!--app:showAsAction="never" />-->

    <item
        android:id="@+id/send_money"
        android:icon="@drawable/edit_new"
        android:title="Send Money"
        app:showAsAction="never" />

    <item
        android:id="@+id/request_money"
        android:icon="@drawable/edit_new"
        android:title="Request money"
        app:showAsAction="never" />

    <item
        android:id="@+id/recharge"
        android:icon="@drawable/edit_new"
        android:title="Recharge"
        app:showAsAction="never" />
</menu>

mảnh bên trong

setHasOptionsMenu (true)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.chat_details_menu, menu);


    super.onCreateOptionsMenu(menu, inflater);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.