2016-06-13 10 views
1

erzeugt, wenn ich dies tun:Toast Schwerkraft eine falsche vertikale Position

toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0); 

... die Oberkante des Toast ist etwa 24 Pixel vom oberen Rand des Bildschirms. Der Hintergrund des Toasts ist ungefähr 48 Pixel hoch. Zufall? Was ist denn hier los?

(Die obere Rand des Bildschirms ist nicht wirklich, wo ich es will. Ich kann es nur dort gesetzt, um Abbildung, um zu versuchen, warum die vertikale Position falsch ist.)

+0

'Gravity' mit einem' Toast' ist eine allgemeine Aussage, wo Sie es wollen. Es ist keine absolute Position. – CommonsWare

+0

@CommonsWare Was ist der Sinn einer API, die einen präzisen Offset von einer allgemeinen Position erlaubt? –

+0

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

Antwort

1

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); 
     } 
    }); 
} 
Verwandte Themen