我希望动态更改ActionBar中的“home”图标。在v14中,可以通过ActionBar.setIcon(...)轻松实现此目标,但我找不到在早期版本中完成此操作的任何方法。
我希望动态更改ActionBar中的“home”图标。在v14中,可以通过ActionBar.setIcon(...)轻松实现此目标,但我找不到在早期版本中完成此操作的任何方法。
如果你的ActionBar的工作方式类似于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);
}
//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中的视图中提取它。Activity.findViewById(android.R.id.home)
可以使用。 - ab11我会这样做:
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer);
请查看链接 如何更改actionBarCompat图标
如果在清单文件中提供了android:logo属性,ActionBar将使用它。这使您可以为图标(启动器)和徽标(ActionBar等)使用单独的可绘制资源。
setIcon
时,会发生任何事情吗?如果您正在尝试在早期版本的 Android 上实现某些功能,您应该查看 ActionBarSherlock。 - adneal