[英]Replacing an ActionBar menu item icon with an indeterminate ProgressBar
我想在Honeycomb ActionBar中添加一个不确定的进度条,这样每当用户按下“刷新”时,刷新图标会暂时变为不确定的进度条,直到任务完成。 电子邮件应用程序已经这样做,但我无法弄清楚如何。
有什么建议?
为了澄清Jon O的答案,关键是设置和取消设置刷新操作的操作视图。 这适用于ActionBarSherlock和本机4.x操作栏。 假设刷新菜单项具有ID“refresh_option”并且替换布局(具有ProgressBar)处于布局'progress_wheel'中,以下片段将将进度不确定视图放在刷新图标的顶部:
MenuItem item = abmenu.findItem(R.id.refresh_option);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View abprogress = inflater.inflate(R.layout.progress_wheel, null);
item.setActionView(abprogress);
取消设置进度视图,刷新图标将返回可见性:
item.setActionView(null);
请参阅github上的更详细示例 。
为了简化larham1的答案 :你甚至不需要夸大新的动作视图本身,因为MenuItem
有接受动作布局id 的方法 ,所以你可以简单地写:
item.setActionView(R.layout.progress_bar);
很难准确地说出电子邮件应用程序是如何做到的,但您可能希望保持简单,只需使用StateDrawable
XML文件的id调用setIcon ,然后使用Timer更改状态。
事实证明,谷歌已经发布了一个例子,将其作为其更广泛的ActionBarCompat兼容性项目的一部分。 看看 。
我正在使用原始问题中提供的代码: https : //github.com/JakeWharton/ActionBarSherlock/issues/425
除了android:layout_width
和android:layout_height
(在actionbar_indeterminate_progress.xml中)我使用32dp
; 因为这是在ActionBarCompat中完成的方式: http : //developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html
您可以通过以下方式轻松完成:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
item.setActionView(new ProgressBar(this));
break;
}
return super.onOptionsItemSelected(item);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.