LENGTH_LONG 및 LENGTH_SHORT의 정확한 기간이 밀리 초 (ms)로 필요합니다. 또한 LENGTH_LONG을 사용하는 토스트 메시지의 지속 시간이 모든 전화기 및 API 버전에서 동일한 지속 시간을 갖는지 알아야합니다.
누군가 정의 된 기간이 어디에 있는지 알고 있습니까?, 내 말은 ms로 정의되어 있습니다. LENGTH_LONG이 값이 1 인 int const라는 것을 알고 있지만 실제 기간이 정의 된 위치를 찾을 수 없습니다.
답변
여기에 답변 했습니다 . 당신이 언급 한 것처럼 Toast.LENGTH_SHORT
및 Toast.LENGTH_LONG
MS하지만, 0 또는 1에 있지 않습니다.
실제 기간은 다음과 같습니다.
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
답변
Toast.LENGTH_SHORT
및 Toast.LENGTH_LONG
단지 플래그입니다.
여기 에서 이러한 플래그 가 정의 된 공식 안드로이드 소스를 찾을 수 있습니다 .
public class NotificationManagerService extends SystemService {
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT;
/** Amount of time (in milliseconds) a toast window can be shown. */
//public static final int TOAST_WINDOW_TIMEOUT = 3500; // 3.5 seconds
static final int SHORT_DELAY = 2000; // 2 seconds
private void scheduleDurationReachedLocked(ToastRecord r)
{
mHandler.removeCallbacksAndMessages(r);
Message m = Message.obtain(mHandler, MESSAGE_DURATION_REACHED, r);
int delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
//....
mHandler.sendMessageDelayed(m, delay);
}
}
답변
토스트 기간을 변경할 수 없다는 것은 사실입니다. 그러나 대안을 찾고 있고 정말 토스트로 이것을해야한다면 이것을 시도 할 수 있습니다.
다음 줄에 또 다른 중복 토스트 유지
전의:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
사용자는 2 개의 토스트 사이의 전환 변화를 감지하지 못합니다.
감사.
답변
다음과 setDuration
같이 작업에서 기간 재정의를 설정해야합니다 .
int s = 6000; // milisegundo
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
답변
Toast.java 클래스에서 지원되는 setDuration () 메소드를 왜 사용하지 않는지 궁금합니다. ??
/**
* Set how long to show the view for.
* @see #LENGTH_SHORT
* @see #LENGTH_LONG
*/
public void setDuration(@Duration int duration) {
mDuration = duration;
}
답변
시행 착오를 통해 2500ms에Toast.LENGTH_LONG
매우 가까운 지속 시간 을 발견했습니다.