在较低的Android版本中,Sherlock actionbar spinner看起来很“旧”

时间:2013-07-11 18:50:43

标签: android actionbarsherlock spinner

我发现了这个问题(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;
}

1 个答案:

答案 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,尽管有风险,或

  • 在较旧的设备上使用较旧的外观,或

  • 请勿在旧设备的操作栏中使用下拉列表