2013-07-11 65 views
0

我發現這個問題(Android 2.2 Spinner looks old in Actionbar),我試過了,但它不適合我!我想在我的Sherlock Actionbar中創建一個Spinner,但在較低的Android版本中看起來很老。這是我的代碼:Sherlock actionbar spinner在較低的Android版本中看起來'舊'

的onCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list); 
    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
} 

Oncreateoptionsmenu:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 


    MenuInflater mi = getSupportMenuInflater(); 
    mi.inflate(R.menu.list, menu); 

    final Spinner spinner = new Spinner(getSupportActionBar() 
    .getThemedContext()); 


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getSupportActionBar().getThemedContext(), 
    R.layout.sherlock_spinner_item, new String[]{"Level 1", "Level 2", "Level 3"}); 
    adapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
     int arg2, long arg3) { 
      // clicked 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    menu.add("Level").setActionView(spinner) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    return true; 
} 

回答

4

這是因爲Spinner老了,ActionBarSherlock不影響Spinner行爲。

如果使用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)代替代碼,您將得到一個可能看起來像您想要的方式的下拉列表......但這不是Spinner。相反,這是一個名爲IcsSpinner的backport,它是ActionBarSherlock內部實現的一部分。 IcsSpinner不是ActionBarSherlock公共API AFAIK的一部分,但是如果你捅了你一下,你會發現一些人把它當作是這樣(如果傑克沃頓改變了IcsSpinner,運行其應用程序的風險就會中斷)。

或者:

  • 使用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST),或者

  • 嘗試全息爲主題的小部件,如HoloEverywhere的支持後向移植,或

  • 拉出ActionBarSherlock的IcsSpinner到你自己的代碼以便您可以獨立於對ActionBarSherlock所做的更改來維護您的副本,或者可以保留您的副本,或者

  • 使用ActionBarSherlock自己IcsSpinner直接,但存在風險,或

  • 直播與舊的外觀和感覺上較舊的設備,或

  • 在你的動作條上不要使用下拉列表舊設備

+0

「直接使用ActionBarSherlock自己的IcsSpinner,儘管存在風險,或者」=>有哪些風險? –

+1

@BartWesselink:正如我寫的,「IcsSpinner」不是ActionBarSherlock公共API的一部分,正如「internal」作爲其包名稱的一部分所證明的那樣。 Jake可以將它移動到一個新的包中,或重新命名它,完全清除它,更改支持的屬性,更改公共Java API或以其他方式混淆它。這樣的改變完全在他的權限之內,因爲'IcsSpinner'是實現的,而不是接口。但是,這些更改很可能會破壞你*(以及任何直接使用'IcsSpinner'的人)。 – CommonsWare

+0

感謝您的回答,這對我有很大幫助! –

相關問題