我发现了这个问题(Android 2.2 Spinner looks old in Actionbar),我试过了,但它对我不起作用!我想在我的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;
}
答案 0 :(得分:4)
那是因为Spinner
旧,而ActionBarSherlock不会影响Spinner
的行为。
如果您使用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)
代替您的代码,您将获得一个可能看起来像您想要的下拉列表......但这不是Spinner
。相反,这是一个名为IcsSpinner
的后端,它是ActionBarSherlock内部实现的一部分。 IcsSpinner
不是ActionBarSherlock公共API AFAIK的一部分,但如果你四处寻找,你会发现有些人会这样对待它(如果杰克沃顿改变IcsSpinner
,则冒着他们的应用程序崩溃的风险)。 / p>
或者:
使用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)
或
尝试支持全息主题小部件的后端,例如HoloEverywhere,或
将ActionBarSherlock的IcsSpinner
拉出到您自己的代码库中,以便您可以独立于对ActionBarSherlock所做的更改来维护您的副本,或者
直接使用ActionBarSherlock自己的IcsSpinner
,尽管有风险,或
在较旧的设备上使用较旧的外观,或
请勿在旧设备的操作栏中使用下拉列表