작업 표시 줄에 드롭 다운 항목을 추가하는 방법


82

내 Android Honeycomb 애플리케이션에서 탭을 탐색 스타일로 사용합니다. 오버플로 버튼 옆에 하나의 항목을 추가하고 싶지만 해당 항목을 드롭 다운 목록으로 만들고 사용자가 여기에서 옵션을 선택할 수 있지만 탐색과는 관련이 없습니다. 내가 사용하고 있기 때문에 가장 쉬운 방법은 무엇입니까mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

사용자 지정보기를 사용하지 않고 할 수 있습니까?


답변:


221

첫 번째 옵션 :

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>

두 번째 옵션 :

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>

레이아웃 /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" />

메뉴 리소스 용 문서-http: //developer.android.com/guide/topics/resources/menu-resource.html


2
그 하위 메뉴는 훌륭한 팁입니다! 연구와 작업 시간을 절약했습니다. 감사합니다!
damaxxed 2010

7
스피너 클릭에 어떻게 반응합니까?
gregm

2
이것은 Android 2.2에서는 작동하지 않습니다. 앱이 충돌합니다. 해결책이 있습니까?
tobias 2013 년

3
ActionBarSherlock을 사용합니다. Android 2.2에서 ActionBar를 다시 도입하지 않았으므로 ActionBarSherlock을 사용하면 이러한 기능의 날짜를 되돌릴 수 있습니다. actionbarsherlock.com
edwoollard

4
@Sandeep Maram Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView()에서 스피너를 얻을 수 있습니다 onCreateOptionsMenu(). 그런 다음 항목 선택 리스너를 설정하십시오.
Lahiru Chandima

34

지금까지 내가 찾은 가장 좋고 가장 간단한 대답은 여기에 있습니다 .

기본적으로이 경우 사용자 지정 레이아웃이 필요하지 않습니다. 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>

그런 다음 평소와 같이 onCreateOptionsMenu에서 처리합니다.

@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); 

이것은 가장 간단하고 깨끗한 솔루션입니다. 원저자 François Poyer에게 감사드립니다.


테스트 및 승인되었습니다.
Gus Costa

0

드롭 다운으로 만 작동합니다.

<?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>

내부 조각

setHasOptionsMenu (true)

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


    super.onCreateOptionsMenu(menu, inflater);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.