我想在Honeycomb ActionBar中添加一个不确定进度条,以便每当用户按下“刷新”按钮时,刷新图标会暂时变成不确定进度条,直到任务完成。电子邮件应用程序已经实现了这一点,但我无法弄清楚如何做到这一点。
有什么建议吗?
有什么建议吗?
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,然后使用定时器更改状态。@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
item.setActionView(new ProgressBar(this));
break;
}
return super.onOptionsItemSelected(item);
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/progressBar2" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="4dp" android:layout_gravity="center" />
。这可以避免菜单项的移动。请记得设置item.setActionView(R.layout.your_layout);
。 - Devendra Vaja事实证明,作为其广泛的ActionBarCompat兼容性项目的一部分,Google已经发布了一个做到这一点的示例。请查看。
android:layout_width
和android:layout_height
之外,我使用32dp
;因为这是ActionBarCompat中使用的方式:http://developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html。