0

我想在我的Android應用程序的選項菜單使用AppCompatActivity添加「微調」的其餘部分。的Android:請微調動作條中具有相同的外觀/風格的動作欄項目

在我準備的示例中,我希望微調器顯示下拉列表選項列表,如「所有/成功/失敗」。

以下在StackOverflow的其他位置找到的說明,我可以將微調器添加到操作欄,但看起來很奇怪。我希望微調器能夠匹配動作欄項目的外觀,這在我的情況下意味着動作欄上的標題應該是白色的,當我點擊微調器時,彈出框應該有白色背景和黑色測試,就像溢出選項菜單。

請參閱下面的屏幕截圖,瞭解我目前的外觀。

Image of collapsed and expanded spinner menu item

正如你所看到的,問題是,微調選擇顯示出來的黑色,當動作條項目的其餘均爲白色。同樣,點擊微調框時,下拉菜單中的項目有黑色背景,黑色文本,而其餘菜單項(例如,溢出菜單),背景爲淺色,黑色文本。

第1步:添加菜單項在菜單XML

<item android:id="@+id/spinner" 
     app:showAsAction="always" 
     android:title="Filter" 
     app:actionViewClass="android.widget.Spinner" /> 

第2步:在我的活動(在此這種情況下

我已經通過以下操作添加此微調片段)菜單擴展代碼,增加了以下

 String [] adapterValues = new String[]{"All", "Successful", "Failed"}; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, adapterValues); 

    MenuItem item = menu.findItem(R.id.spinner); 

    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); 
    spinner.setAdapter(adapter); 

解決方案試圖

在我的陣列適配器

因此,而不是使用默認的微調佈局,我創建的,如下圖所示提供我的老闆佈局:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.actionbar_spinner_filter, R.id.spinner_text, adapterValues); 

以及相應的佈局文件是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="16dp" 
    android:background="@android:color/white" 
> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/spinner_text" 
    /> 

</LinearLayout> 

這給了我以下結果,正如你所看到的,這些很奇怪。

Image of collapsed and expanded spinner menu

問題摘要:

  1. 這是增加一個選項菜單我AppCompatActivity爲「下拉菜單」效果的最佳途徑?
  2. 什麼是我可以用來確保微調菜單的外觀與摺疊時的操作欄相匹配的最佳方式,以及何時展開,它與操作欄中彈出項目的其餘部分(例如溢出菜單)?

感謝

+0

只是一個問題:您是否嘗試在actionbar_spinner_filter.xml中的T​​extView的width屬性中添加fill_parent? – zkminusck

+0

** zkminusck **:謝謝您的建議。我更新了佈局以使textviews填充整個彈出窗口,並更新了我的問題中的截圖。我當初的問題仍然需要回答,但至少這部分是固定的。 –

回答

1

在你的菜單的XML文件做這樣的事情:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app.polar="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/item0" 
     app.polar:showAsAction="always" 
     android:icon="@drawable/some_icon" 
     android:title="@string/some_title"/> 
    <item 
     android:id="@+id/item1" 
     app.polar:showAsAction="always" 
     android:icon="@drawable/some_icon" 
     android:title="@string/some_title"> 
     <menu 
      android:id="@+id/submenu1"> 
      <item 
       android:id="@+id/item11" 
       app.polar:showAsAction="never" 
       android:title="@string/some_submenu_title"/> 
      <item 
       android:id="@+id/item12" 
       app.polar:showAsAction="never" 
       android:title="@string/some_submenu_title"/> 
      <item 
       android:id="@+id/item13" 
       app.polar:showAsAction="never" 
       android:title="@string/some_submenu_title"/> 
      </menu> 
     </item> 
    </menu> 

在您的活動做這樣的事情:

public boolean onCreateOptionsMenu(Menu menu){ 
    getMenuInflater().inflate(R.menu.yourmenu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
     case R.id.item0:{ 
      //do something 
      return true; 
     } 
     case R.id.item11:{ 
      //do something 
      return true; 
     } 
     case R.id.item12:{ 
      //do something 
      return true; 
     } 
     case R.id.item13:{ 
      //do something 
      return true; 
     } 
    } 
    return super.onOptionsItemSelected(item); 
} 

,如果你不喜歡這樣的風格您的子菜單將始終與正常的操作欄溢出菜單相同。

+0

非常感謝@zkminusck的幫助。 但是,對於有人在ActionBar中查找嵌套菜單的情況,這似乎是一個很好的解決方案,並且每個項目的作業僅僅是觸發一個操作。 如果我正確地閱讀它,這將只允許下拉菜單項,但下拉列表中的選項不會更改最上面項目的標題。 這與Spinner行爲不同,它基本上顯示了可能的值和當前的選擇。當進行選擇並關閉下拉菜單時,顯示當前選擇的最上面的文字也會發生變化。 –