And*_*res 55 android android-actionbar
我有一个Activity
它有一个ActionBar
,但我需要改变的图标ActionBar
动态,我有一个暂停和播放按钮,我需要更换播放与按钮暂停按钮就可以了用户点击.我搜索过,发现它:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(DEBUG) Log.i("onCreateOptionsMenu()", "onCreateOptionsMenu() -> LogicAnalizerView");
//menu.add("").setIcon(R.drawable.pause).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbarlogic, menu);
menu.removeItem(R.id.pauseLogic);
return true;
}
Run Code Online (Sandbox Code Playgroud)
因此,通过这种方式,我删除了暂停按钮,我也可以添加它,但它只会在我启动Activity
并且ActionBar
绘制时发生.我怎么强迫重绘ActionBar
?此外,通过这种方式,整个ActionBar
重绘.是对的吗?有没有办法只重绘我想要的按钮/图标?
谢谢 :)
chu*_*ubs 50
在完成通货膨胀后,您必须保存对MenuItem的引用.如下所示:
public boolean onCreateOptionsMenu( Menu menu ) {
MenuInflater inflater = getMenuInflater();
inflater.inflate( R.menu.actionbarlogic, menu );
playMenu = menu.findItem(R.id.playMenu);
updatePlayStatus();
return menu;
}
public void updatePlayStatus() {
if( playService.isConnected() ) {
playService.isPlaying() ? playMenu.setIcon(R.drawable.pause) : playMenu.setIcon(R.drawable.play);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以随时参考playMenu.因此,您可以修改项目,如播放器完成播放,并应返回播放图标.
San*_* D. 20
您可以隐藏不想显示的按钮,而不是删除它们.
例如:
private boolean isPlaying;
MenuItem mPlayMenuItem;
MenuItem mPauseMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbarlogic, menu);
mPlayMenuItem = menu.findItem(R.id.action_play);
mPauseMenuItem = menu.findItem(R.id.action_pause);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_play:
isPlaying = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
return true;
case R.id.action_pause:
isPlaying = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
super.onPrepareOptionsMenu(menu);
if (isPlaying) {
mPlayMenuItem.setVisible(false); // hide play button
mPauseMenuItem.setVisible(true); // show the pause button
} else if (!isPlaying) {
mPlayMenuItem.setVisible(true); // show play button
mPauseMenuItem.setVisible(false); // hide the pause button
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这个:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)
需要更新操作栏.在3.0设备之后,操作栏不会自动更新.因此,您必须手动告诉它调用"OnPrepareOptionsMenu(Menu)",以便它通过调用"Activity.invalidateOptionsMenu()"来刷新项目.
希望这可以帮助!
参考:http://developer.android.com/reference/android/app/Activity.html#onPrepareOptionsMenu(android.view.Menu)
Dav*_*vid 10
private Menu mMenu;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main_activity, menu);
// Save the menu reference
mMenu = menu;
return super.onCreateOptionsMenu(menu);
}
// For example - Call when you need to change icon
private void setActionIcon(boolean showWithBadge)
{
MenuItem item = mMenu.findItem(R.id.ITEM_ID);
if(mMenu != null)
{
if(showWithBadge)
{
item.setIcon(R.drawable.IC_WITH_BADGE);
}
else
{
item.setIcon(R.drawable.IC_WITHOUT_BADGE);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67752 次 |
最近记录: |