私は画面の下部に配置したいと同時に画面の幅を埋めるカスタムレイアウトのトーストを持っています。私はそれが正しく働くようにすることはできません。画面下部にカスタムレイアウトのトーストを配置する
私のトーストのレイアウトtoast.xml:
<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ee222222"
android:textColor="#ffffff" />
トースト、MyToast.java表示するコード:ここで
View view = inflater.inflate(R.layout.toast, null);
TextView textView = phoneToastView.findViewById(R.id.text);
textView.setText("1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18");
Toast toast = new Toast(getContext());
toast.setGravity(Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
は私の問題である:
私が設定している場合重力を下に、私は画面の下部にトーストを取得します。重力をFILL_HORIZONTALに設定すると、画面が水平に塗りつぶされます。両方を使用すると、画面が水平に塗りつぶされますが、トーストと画面の下部の間には隙間があります。
私は、Androidがビューを作成し、それを一番下に移動し、の場合、がそれを広げていると思います。今やテキストにはより多くのスペースがあり、いくつかのスクリーンといくつかのテキストでは、2行のテキストから1行のテキストに変わることを意味しています。
このビューでは、突然垂直方向のスペースが少なくて済み、ビューは下端を上に移動することによって縮小されます。
方法はありますか? Androidの水平方向の塗りつぶしを強制できますか?最初にとを入力してからを下に移動しますか?ビューを底からではなく上から垂直に収縮させることはできますか?コメントのいくつかに
回答:
- このトーストが表示されますので、私のアプリがバックグラウンド
- 私はトーストに表示していますテキストにあるとき、私は、スナックバーを使用することはできません長さが変化するので、私はそれが上記のコードは、私はエラー
更新:
、問題を再現することができ、上記のコードを使用してアプリケーションを実行するには、仮想デバイスネクサスには、以下5.
は、3つの異なる長さのテキストとスクリーンショットへのリンクです。中央のテキストはトースト下記のギャップを取得し、最短と最長のテキストが下部に表示されます。
アップデート2:私のソリューション
私の新しいトーストレイアウトのトースト。XML:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ee222222"
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#ffffff" />
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#ffffff" />
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="3"
android:ellipsize="end"
android:textColor="#ffffff" />
</LinearLayout>
トースト、MyToast.java表示する新しいコード:私のニーズのために
View view = inflater.inflate(R.layout.toast, null);
TextView textView1 = phoneToastView.findViewById(R.id.text1);
textView1.setText("Some text on one line");
TextView textView2 = phoneToastView.findViewById(R.id.text2);
textView2.setText("Some more text on one line");
TextView textView3 = phoneToastView.findViewById(R.id.text3);
textView3.setText("Even more text, and this text is much longer, not fitting on one line at all.");
// If I don't need the unpredictable third line of text, hide the view
textView3.setVisibility(View.GONE);
Toast toast = new Toast(getContext());
toast.setGravity(Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
を、私はほとんどの一番下になりますtextviews 1と2次にトーストを使用します。 (テキストは1行に固定されているので)画面に表示されます。状況によっては、テキストの長さを予測することができず、次にテキストビュー3を使用します。次に、トーストは底にはありませんが、これはまれです。
「TextView」行を2つに固定しても構いませんか? – Xenolion
私はそれを再現することができません、私のデバイス上で正しく表示されます。どのデバイスを使ってテストしていますか? – PrisonMike
おそらく最もよい選択は[snackbar](https://developer.android.com/training/snackbar/action.html)を使用することです。 –