如何显示Indeterminate ProgressBar
当Refresh
按钮在ActionBarSherlock
中按下时,刷新按钮时再次显示ViewGroup?如何在ActionBarSherlock中按下刷新按钮时显示不确定进度条?
更新1: 我在这里有一个答案是不完整的。我正在提出一个问题的答案,以便更多的开发人员能够帮助建立一个对他人未来有用的好答案。
我们如何可以显示一个Indeterminate ProgressBar
,它看起来像下面
如何显示Indeterminate ProgressBar
当Refresh
按钮在ActionBarSherlock
中按下时,刷新按钮时再次显示ViewGroup?如何在ActionBarSherlock中按下刷新按钮时显示不确定进度条?
更新1: 我在这里有一个答案是不完整的。我正在提出一个问题的答案,以便更多的开发人员能够帮助建立一个对他人未来有用的好答案。
我们如何可以显示一个Indeterminate ProgressBar
,它看起来像下面
的图像中显示的一个好像ActionBarSherlock没有提供具体的方法动画刷新菜单项。
你可以做什么(通过使用经典的android API)是使用setActionView(int resId)
方法,并给它的ProgressBar布局的ID。
在你刷新行动开始只要致电:
item.setActionView(R.layout.refresh_menuitem);
当你的刷新动作完成呼叫:
item.setActionView(null);
这里是你的布局文件refresh_menuitem.xml的样本可以有:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:addStatesFromChildren="true"
android:focusable="true"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
style="?attr/actionButtonStyle">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
style="@android:style/Widget.ProgressBar.Small"/>
</LinearLayout>
+1好的,它的工作原理。我们可以改变进度条对ICS的外观吗? –
我已经更新了这个问题,请看看它。 –
将ProgressBar风格设置为“@android:style/Widget.Holo.ProgressBar.Small” – omoling
这是你如何添加这种不确定的进度与一个ActionBarSherlock
对象:(实际上它更容易在其他之一,但进度单独,而不是上面显示一个MenuItem
)
1 - 中的setContentView之前把这一行在onCreate()方法()调用:
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
- >此行指定您将使用不确定的ProgressBar函数。
2 - 通过调用启用不确定的进度:
setSupportProgressBarIndeterminateVisibility(true);
3 - 通过调用禁用不确定的进度:
setSupportProgressBarIndeterminateVisibility(false);
注:已在ActionBarSherlock文件夹中的样本文件夹的样子。我发现在以下文件中的代码: JakeWharton-ActionBarSherlock-9598f2b \样本\ demos中的\ src \ COM \ actionbarsherlock \样本\演示\ IndeterminateProgress.java
我正在寻找结合两者,即在MenuItem中具有ICS风格的不确定栏。 –
下面是一个完整的代码:
private static final int menuItemIdRefresh = 10; //class constant
private boolean refresh;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem refreshItem = menu.add(0, menuItemIdRefresh, 0,
getString(R.string.action_refresh)).setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS);
if (isRefreshing) {
refreshItem.setActionView(R.layout.indeterminate_progress);
} else {
refreshItem.setActionView(null);
refreshItem.setIcon(R.drawable.ic_refresh);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case menuItemIdRefresh: {
//the user has pressed the refresh button
if (!isRefreshing) {
isRefreshing = true;
new RefreshMyViewAsyncTask().execute("");
}
}
break;
default:
break;
}
return false;
}
最后一个注意事项,为了获得上面的代码,你需要调用supportInvalidateOptionsMenu()。您可以将其添加到RefreshMyViewAsyncTask的onPreExecute()方法中。
希望这有助于某人。
它看起来像你有一个问题,@anadobes回答你的满意(和你应该接受)。现在你有另外一个独立的问题,你应该问一个新问题,而不是编辑这个问题。如果您想要获得新问题的奖励,您可以举出这个问题,解释情况,而国防部可能会为您退款。 – blahdiblah
我认为编辑已经足够接近了,它不能保证提出新的问题。但是,将来,请在提出原始问题时尝试包含这类信息*。我们偶尔会遇到与尝试重新使用现有问题以询问新问题的用户有关的问题,这是不允许的。 – Will
为什么要摆在首位?这不能确认当前的设计模式 – Bostone