Si prega di leggere la domanda prima di rispondere con la vostra routine standard per stampare un toast :)Toast personalizzati schermo superiore
mi piacerebbe per visualizzare un Toast personalizzato in alto a sinistra dello schermo. Uso questo codice per creare la tostatura:
Toast mFixedToast = new Toast(getApplicationContext());
mFixedToast.setDuration(timeout);
mFixedToast.setView(myInflatedLayout);
mFixedToast.setGravity(Gravity.TOP|Gravity.FILL_HORIZONTAL, 0, 0);
mFixedToast.setMargins(0,0);
Tuttavia, in alcuni dispositivi , per esempio Samsung Galaxy S4, il toast non è posizionato a (0,0), ma con un margine come 40-50 pixel. Molti altri dispositivi funzionano come previsto.
Io sono positivo il margine viene aggiunto dal WindowManager (La vista brindisi è aggiunto come una visualizzazione di tipo TYPE_TOAST al WindowManager)
Perché? Può essere modificato? Si prega di consultare il codice qui sotto, ho clonato Toast.java nella mia stessa classe e isolato le linee in cui viene aggiunta la vista al WM:
// LayoutParams for the TOAST view ... tried to change params.type but no luck.
final WindowManager.LayoutParams params = mParams;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
params.windowAnimations = android.R.style.Animation_Toast;
params.type = WindowManager.LayoutParams.TYPE_TOAST;
mWM = (WindowManager)mView.getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
mParams.gravity = gravity;
// CHECKED these all are 0 !!!
mParams.x = mX; mParams.y = mY;
mParams.verticalMargin = mVerticalMargin;
mParams.horizontalMargin = mHorizontalMargin;
.
.
if (localLOGV) Log.v(TAG, "ADD! " + mView + " in " + this+" with "+mX+","+mY+","+mVerticalMargin+","+mHorizontalMargin);
mWM.addView(mView, mParams);
Quindi sembra come se fosse l'WindowManager che è l'aggiunta di questo margine su quei dispositivi. Sembra un'area sicura o qualcosa del genere, ma non riesco a trovare dove (o se) questo può essere cambiato.
Aiuto apprezzato.
Ho notato che lo spazio in alto è 4.0+. Hai mai capito come risolvere questo? – Ali
Non importa, capito, vedi la mia risposta qui sotto. – Ali