我想动态更改ActionBar中的“home”图标。这可以在v14中使用ActionBar.setIcon(...)轻松完成,但我无法在以前的版本中找到完成此操作。
答案 0 :(得分:22)
如果您的操作栏像Sherlock一样工作并且基于菜单项,那么这就是我的解决方案:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem switchButton = menu.findItem(R.id.SwitchSearchOption);
if(searchScriptDisplayed){
switchButton.setIcon(R.drawable.menu_precedent);
}else{
switchButton.setIcon(R.drawable.icon_search);
}
return super.onPrepareOptionsMenu(menu);
}
答案 1 :(得分:17)
如果您使用的是谷歌提供的ActionbarCompat代码,则可以通过ActionBarHelperBase.java类访问主页图标,以获取API v4及更高版本。
//code snippet from ActionBarHelperBase.java
...
private void setupActionBar() {
final ViewGroup actionBarCompat = getActionBarCompat();
if (actionBarCompat == null) {
return;
}
LinearLayout.LayoutParams springLayoutParams = new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.MATCH_PARENT);
springLayoutParams.weight = 1;
// Add Home button
SimpleMenu tempMenu = new SimpleMenu(mActivity);
SimpleMenuItem homeItem = new SimpleMenuItem(tempMenu,
android.R.id.home, 0, mActivity.getString(R.string.app_name));
homeItem.setIcon(R.drawable.ic_home_ftn);
addActionItemCompatFromMenuItem(homeItem);
// Add title text
TextView titleText = new TextView(mActivity, null,
R.attr.actionbarCompatTitleStyle);
titleText.setLayoutParams(springLayoutParams);
titleText.setText(mActivity.getTitle());
actionBarCompat.addView(titleText);
}
...
您应该能够将代码修改为扩展ActionBarActivity的活动可访问的主页按钮,并以这种方式进行更改。
Honeycomb似乎有点困难,似乎没有这么容易访问。猜测,它的id也应该是android.R.id.home所以你可以从ActionBarHelperHoneycomb.java中的视图中提取它
答案 2 :(得分:1)
我会说你做这样的事情:
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer);
答案 3 :(得分:0)
如果提供了清单,ActionBar将使用清单的android:logo属性。这使您可以为图标(Launcher)和徽标(ActionBar等)使用单独的可绘制资源。