Nougatの新しいマルチウィンドウモードを使用しているときにToast
、自分のアプリがポートレートモードのトップウィンドウにある場合、別のアプリの上にが表示されることに気付きました。
これは...全然良くありません。そこで、「Androidでトーストの位置を変更するにはどうすればよいですか?」という回答にToast
基づいて配置してみました。
toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
残念ながら、Gravity
は「私の窓の重力」ではなく「画面の重力」として解釈されているようです。
Toast
ウィンドウの下部近くに表示され、水平方向の中央に表示されるようにするにはどうすればよいですか?
これが意図した動作だと思います。マテリアルデザインガイドラインによると、目的を達成するための簡単な方法がないことを超えて、トーストは主にシステムメッセージを伝えるために使用され、画面の下部に表示されます。
私の推測では、システムメッセージはデバイス全体に関係する必要があり、必ずしもアプリケーション固有ではないため、この一貫した動作は理にかなっています。とはいえ、トーストがアプリケーションの1つで画面の実質的に25%を占めるようになるため、この動作が望ましくない理由がわかります...ただし、トーストの位置に関係なく、実際にその画面をゴブリングしますそれがあなたのアプリケーションにあるか以下のものであるかにかかわらず、不動産。
本当に回避策を実装したい場合は、トーストを垂直方向にオフセットするための実装を次に示します。わずかなバリエーションでランドスケープモードを実現する必要がありますが、もう少し厄介です。
View root = findViewById(R.id.root_main);
int[] xy = new int[2];
root.getLocationOnScreen(xy);
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int devHeight = displayMetrics.heightPixels;
int viewHeight = root.getHeight();
Toast toast = Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_LONG);
int yOffset = Math.abs(xy[1] - devHeight + viewHeight) + toast.getYOffset();
toast.setGravity(Gravity.BOTTOM, 0, yOffset);
toast.show();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加