我看到,確定其上的屏幕顯示的長度時,小吃吧將只需要要麼LENGTH_LONG或LENGTH_SHORT。的Android支持庫小吃吧與不定長度
我想顯示它,直到有人將它從屏幕上滑下來。對於某些情況下,如果您持續出現錯誤,例如您沒有互聯網,並且您希望在選擇LENGTH_LONG後2750毫秒後通知用戶而不會在屏幕上消失,則會出現這種情況。
當然,我可以使用setDuration到可笑的長毫秒值,但有沒有辦法設置好它,這樣它不會消失,直到用戶將其關閉?
我看到,確定其上的屏幕顯示的長度時,小吃吧將只需要要麼LENGTH_LONG或LENGTH_SHORT。的Android支持庫小吃吧與不定長度
我想顯示它,直到有人將它從屏幕上滑下來。對於某些情況下,如果您持續出現錯誤,例如您沒有互聯網,並且您希望在選擇LENGTH_LONG後2750毫秒後通知用戶而不會在屏幕上消失,則會出現這種情況。
當然,我可以使用setDuration到可笑的長毫秒值,但有沒有辦法設置好它,這樣它不會消失,直到用戶將其關閉?
UPDATE:如前所述,這是現在可以與Android支持庫22.2.1的版本,使用LENGTH_INDEFINITE標誌
這是不可能使用的正式實施時設置一個小吃吧無限期顯示來自Android設計支持庫。
雖然這樣做可能違反的小吃店的材料設計理念,有第三方小吃吧實現,也讓這一點。這裏有一個例子:
https://github.com/nispok/snackbar
該項目允許以下值顯示的時間:
LENGTH_SHORT: 2s
LENGTH_LONG: 3.5s (default)
LENGTH_INDEFINTE: Indefinite; ideal for persistent errors
要注意的是這個項目不再被開發,由於官方小吃吧的發佈實施。
最近有可能使用支持設計22.2.1最近釋放。 –
Android的支持庫(22.2.1)的最新版本,現在包括LENGTH_INDEFINITE
。
下面將顯示小吃吧,直到它被駁回或另一個小吃吧被示出。
Snackbar.make(view, "Your Snackbar", Snackbar.LENGTH_INDEFINITE)
.setAction("Your Action", null).show();
小吃店會自動從屏幕超時。他們不應該是持久的或堆疊,因爲他們在屏幕上的其他元素。
因此,Snackbars似乎不適合您的用戶通知用戶的用例,直到用戶做了某些事情來解僱它。
相反,你應該考慮使用對話框
對話框總是保留焦點,直到解僱或所需已採取行動
欲瞭解更多信息,請參考:
我正在使用com.android.support:appcompat-v7:26.1。0和Snackbar.LENGTH_INDEFINITE
的工作原理應該如此。示例可能如下所示:
private HashMap<Long, Snackbar> mTokenSnackbarMap = new LinkedHashMap<>();
private void dropPoint(@NonNull Location location) {
final Long token = SystemClock.elapsedRealtime();
// <submitPoint> is the callback to be executed
// at a time in the future, if the "cancel" button
// of the Snackbar isn't clicked until that time.
Runnable submitPoint =() -> {
Snackbar bar = mTokenSnackbarMap.get(token);
if (bar != null) {
// "cancel" button of the Snackbar wasn't clicked,
// but our time is up. Dismiss the Snackbar.
bar.dismiss();
mTokenSnackbarMap.remove(token);
Log.i(TAG, "dropPoint: dismiss snackbar");
}
mDatabase.add(Point.Factory.create(uid, location));
Log.i(TAG, "dropPoint: addPoint");
};
// The indefinite Snackbar allowing arbitrary cancellation.
Snackbar snackbar = Snackbar.make(mMainView, R.string.point_pending, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.cancel, (v) -> {
mTokenSnackbarMap.remove(token);
mUiHandler.removeCallbacks(submitPoint, token);
Log.i(TAG, "dropPoint: cancel snackbar");
});
mTokenSnackbarMap.put(token, snackbar);
mUiHandler.postAtTime(submitPoint, token,
SystemClock.uptimeMillis() + Constants.POINT_DELAY_MILLIS);
Log.i(TAG, "dropPoint: postAtTime");
snackbar.show();
}
值得注意的是,Material Design的準則明確指出Snackbars是瞬態視圖元素。這意味着它們不應該卡在屏幕上,因爲它們會阻擋屏幕上的其他元素。 –
同意和好點。你認爲沒有互聯網消息必須建立在我的用戶界面的視圖,而不是?如果小吃店不是合適的工具,如何通知用戶「沒有互聯網」? – Simon
如果主動/永久連接非常重要,我有時會將工具欄更改爲其他顏色,更改圖標或顯示通知。如果它只是一個加載數據的Recycler/ListView,你應該在那裏顯示消息(使用刷新按鈕),直到它被另一個片段替換。 –