Bitte lesen Sie die Frage, bevor Sie mit Ihrer Standard-Routine der Beantwortung eine Toast zu drucken :)benutzerdefinierter Toast auf Bildschirm oben
Ich mag einen benutzerdefinierten Toast in der oberen linken Ecke des Bildschirms angezeigt werden soll. Ich benutze diesen Code, um den Toast zu erstellen:
Toast mFixedToast = new Toast(getApplicationContext());
mFixedToast.setDuration(timeout);
mFixedToast.setView(myInflatedLayout);
mFixedToast.setGravity(Gravity.TOP|Gravity.FILL_HORIZONTAL, 0, 0);
mFixedToast.setMargins(0,0);
jedoch in einigen Geräten, zum Beispiel Samsung Galaxy S4 wird der Toast nicht auf (0,0) positioniert ist, aber mit einer Marge wie 40-50 Pixel. Viele andere Geräte funktionieren wie erwartet.
Ich bin sicher, die Marge durch den Windowmanager hinzugefügt wird (Die Toast Ansicht wird als Ansicht vom Typ TYPE_TOAST zum Windowmanager hinzugefügt)
Warum ist das so? Kann es geändert werden? Bitte beachten Sie den Code unten, habe ich Toast.java in meine eigene Klasse kloniert und isoliert die Linien, wo der Blick auf die WM hinzugefügt wird:
// 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);
So sieht es aus wie es die Windowmanager ist, die diese Marge ist das Hinzufügen auf diesen Geräten. Sieht nach einem sicheren Bereich oder ähnlichem aus, aber ich kann nicht finden, wo (oder ob) das geändert werden kann.
Hilfe geschätzt.
Ich habe bemerkt, der Platz an der Spitze ist 4.0+ Geräte. Haben Sie jemals herausgefunden, wie Sie das lösen können? – Ali
Macht nichts, herausgefunden, seht meine Antwort unten. – Ali