g12*_*23k 23 gmail android tablet android-3.0-honeycomb progress-bar
我想和Honeycomb平板电脑上的GMail应用程序做同样的事情.单击"刷新"按钮时,图标将替换为ProgressBar.我怎样才能做到这一点?
谢谢
ada*_*amp 25
Gmail使用操作视图执行此操作以实现"刷新进行中"状态.使用标准操作按钮/ onMenuItemSelected路径调用刷新.
进入刷新状态时,将刷新MenuItem的操作视图设置为ProgressBar.(以编程方式创建,从布局中扩展它,在CommonsWare建议的菜单xml中使用actionLayout,无论您喜欢什么.)当您退出刷新状态时,将操作视图设置回null,同时保持对它的引用,以便您可以设置下次刷新时它会再次返回.在菜单膨胀后,您可以挂起对MenuItem的引用,稍后对其进行的更改将反映在操作栏中.
与使用全时操作视图和自己管理状态更改的其他详细信息相比,此方法具有一些优势.操作视图完全替换菜单项的生成的操作按钮,有效地阻止用户在刷新已经进行时发送通常的onMenuItemSelected事件以进行刷新.少处理一下,动作视图可以保持完全非交互.
您可以使用API 14+中的ActionProvider做一些聪明的事情,以便将整个过程封装得更多,但上述结果非常简单.
Iva*_* G. 25
好吧,我尝试过Cailean的建议,但它对我不起作用.每当我想将不确定的进度恢复到原始按钮时,它就变得无法点击,我使用此布局进行处理
(actionbar_refresh_progress.xml)
<?xml version="1.0" encoding="utf-8"?>
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center"/>
Run Code Online (Sandbox Code Playgroud)
这一个恢复到按钮
(actionbar_refresh_button.xml)
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_menu_refresh_holo_light"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)
我的代码是:
private void setRefreshing(boolean refreshing) {
this.refreshing = refreshing;
if(refreshMenuItem == null) return;
View refreshView;
LayoutInflater inflater = (LayoutInflater)getActionBar().getThemedContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(refreshing)
refreshView = inflater.inflate(R.layout.actionbar_refresh_progress, null);
else
refreshView = inflater.inflate(R.layout.actionbar_refresh_button, null);
refreshMenuItem.setActionView(refreshView);
}
Run Code Online (Sandbox Code Playgroud)
浏览Google IO应用的来源后,尤其是此文件:http://code.google.com/p/iosched/source/browse/android/src/com/google/android/apps/iosched/ui/HomeActivity. java的我发现了另一个更简单的方法.
现在我只需要第一个带有进度的布局,工作方法如下所示:
private void setRefreshing(boolean refreshing) {
this.refreshing = refreshing;
if(refreshMenuItem == null) return;
if(refreshing)
refreshMenuItem.setActionView(R.layout.actionbar_refresh_progress);
else
refreshMenuItem.setActionView(null);
}
Run Code Online (Sandbox Code Playgroud)
菜单项定义:
<item android:id="@+id/mail_refresh"
android:title="Refresh"
android:icon="@drawable/ic_menu_refresh_holo_light"
android:showAsAction="always"/>
Run Code Online (Sandbox Code Playgroud)
我希望有人觉得这很有用.
小智 8
假设您已经设置了菜单项,则需要先创建两个新布局.一个包含普通刷新按钮的布局,另一个包含进度条.
获得后,调用以下代码在两个布局之间切换.您需要确定何时需要再次调用它才能将其切换回刷新图标.
private void doRefresh(Boolean refreshing, MenuItem menuItem)
{
View refreshView;
LayoutInflater inflater = (LayoutInflater) getActionBar().getThemedContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(refreshing)
refreshView = inflater.inflate(R.layout.actionbar_indeterminate_progress, null);
else
refreshView = inflater.inflate(R.layout.refresh_icon, null);
menuItem.setActionView(refreshView);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15547 次 |
| 最近记录: |