fand ich eine Erklärung, wenn auch keine Lösung. Es scheint, dass die Toastposition nicht berücksichtigt, dass die Navigations- und Statusleisten im Vollbildmodus ausgeblendet sind, und positioniert sich so, als ob sie sichtbar wären.
Meine Aktivität setzt den Vollbildmodus in onCreate
und onWindowFocusChanged
. Ich habe versucht, den Toast so spät wie möglich anzuzeigen, indem ich ihn an einen Handler von onPostResume
poste, aber er verhält sich immer noch so, als ob die System-UI sichtbar wäre.
Falls ich etwas fehle, das ist, wie ich Vollbildmodus bin Einstellung:
@TargetApi(Build.VERSION_CODES.KITKAT)
private void enableFullScreenMode() {
int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}
getWindow().getDecorView().setSystemUiVisibility(flags);
/* Calling setSystemUiVisibility directly works most of the time, but
* sometimes the navigation bar gets stuck, covering part of the UI.
* Posting it seems to prevent this. */
final int finalFlags = flags;
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
getWindow().getDecorView().setSystemUiVisibility(finalFlags);
}
});
}
'Gravity' mit einem' Toast' ist eine allgemeine Aussage, wo Sie es wollen. Es ist keine absolute Position. – CommonsWare
@CommonsWare Was ist der Sinn einer API, die einen präzisen Offset von einer allgemeinen Position erlaubt? –
Ummm ... gute Frage. Ich habe vergessen, dass diese beiden anderen Parameter X- und Y-Offsets waren. Entschuldigen Sie. Der 'Toast'-Quellcode zeigt, dass diese Werte in die' WindowManager.LayoutParams' gehen, die für das 'Toast'-Fenster verwendet werden. – CommonsWare