我一直在寻找适合我问题的解决方案,但我似乎找不到一个.我有一个ActionBar(ActionBarSherlock),其菜单从XML文件中膨胀,该菜单包含一个项目,并且该项目显示为ActionItem.
菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_menu_refresh"
android:showAsAction="ifRoom"
android:title="Refresh"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
活动:
[...]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
[...]
Run Code Online (Sandbox Code Playgroud)
ActionItem显示时带有图标而没有文本,但是当用户点击ActionItem时,我希望图标开始动画,更具体地说,是在适当的位置旋转.有问题的图标是刷新图标.
我意识到ActionBar支持使用自定义视图(添加动作视图)但是这个自定义视图被扩展为覆盖ActionBar的整个区域并且实际上阻止了除应用程序图标之外的所有内容,在我的情况下这不是我想要的.
所以我的下一次尝试是尝试使用AnimationDrawable并逐帧定义我的动画,将drawable设置为菜单项的图标,然后在onOptionsItemSelected(MenuItem item)获取图标并开始使用动画((AnimationDrawable)item.getIcon()).start().但这并不成功.有谁知道有任何方法来实现这种效果?
我正在尝试在我的应用中实现刷新按钮,以允许用户手动重新同步到Web服务器.代码有效,但我无法弄清楚动作视图(至少,我认为这是我应该使用的).
我的菜单项目在这里:
<item
android:id="@+id/main_menu_refresh"
android:enabled="true"
android:icon="@drawable/refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/refresh"
android:actionViewClass="android.widget.ProgressBar">
</item>
Run Code Online (Sandbox Code Playgroud)
问题是,它总是显示ProgressBar.我想知道它是否像搜索小部件(我真正在网上看到的唯一例子)一样工作,并将collapseActionView标签添加到showAsAction并且阻止它立即显示.但是,当我单击刷新按钮时,图标会消失(好),但操作栏中的标题也会消失,并且ProgressBar会出现在标题所在的窗口左侧.也不是我想要的.
作为最后的努力,我试图将其添加到我的代码中,并actionViewClass从XML中删除:
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
Log.w("MyApp", "Have Menu");
ProgressBar pb = new ProgressBar(ReadingList.this);
refresh.setActionView(pb);
Run Code Online (Sandbox Code Playgroud)
这也没用,给我一个空指针错误setActionView.
我需要一个可以从任何函数调用的解决方案(开头有一个自动同步周期,我希望ProgressBar也可以显示),然后能够将它返回到它的静态图标.
我尝试阅读这个问题,但我无法理解答案意味着什么.我觉得我试图按照它说的做,但我想不是.非常感谢任何帮助.
编辑:对于sastraxi的建议.
public class IconSwitcher extends LinearLayout{
public IconSwitcher(Context context) {
super(context);
ProgressBar pb = new ProgressBar(context);
ImageView iv = new ImageView(context);
addView(iv);
addView(pb);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的班级.但是,当我尝试引用它时:
MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
IconSwitcher ic = (IconSwitcher) refresh.getActionView();
Run Code Online (Sandbox Code Playgroud)
我得到一个空指针错误.创建IconSwitcher.按钮XML如下:
<item
android:id="@+id/main_menu_refresh"
android:enabled="true"
android:icon="@drawable/refresh"
android:orderInCategory="1" …Run Code Online (Sandbox Code Playgroud)