如何顯示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