すべてのアクティビティで使用するカスタムテーマを作成しました。テーマでは、Android:backgroundを設定すると、ダイアログやトーストメッセージが非常に奇妙に見えます。
トーストや他のダイアログがテーマのプロパティを吸収しないようにするにはどうすればよいですか?
次のコードでカスタムトーストを簡単に作成できます。
Toast toast = Toast.makeText(context, resTxtId, Toast.LENGTH_LONG);
View view = toast.getView();
view.setBackgroundResource(R.drawable.custom_bkg);
TextView text = (TextView) view.findViewById(Android.R.id.message);
/*here you can do anything with text*/
toast.show();
または、完全にカスタムのトーストをインスタンス化できます。
Toast toast = new Toast(context);
toast.setDuration(Toast.LENGTH_LONG);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.custom_layout, null);
toast.setView(view);
toast.show();
ダイアログのカスタマイズは、より複雑なルーチンです。しかし、同様の回避策があります。
質問には回答済みで、この段階では投稿はかなり古いものです。しかし、私はこの質問に出くわした人たちに答えを残したいと思いました。
今日、この問題に遭遇しました。解決方法は、次のようなトーストメッセージを表示することでした。
Toast.makeText(getApplicationContext(), "Checking login details...", Toast.LENGTH_SHORT).show();
これとは対照的に(メッセージがビュー内から呼び出されていると想定):
Toast.makeText(v.getContext(), "Checking login details...", Toast.LENGTH_SHORT).show();
それは私が抱えていた問題を解決しました。とにかくそれが役に立てば幸いです。これは、同様のトピックに関する私の質問へのリンクです。
これは、アクティビティ全体でカスタマイズされたトーストに使用される完全な例です。
displayToast
// display customized Toast message
public static int SHORT_TOAST = 0;
public static int LONG_TOAST = 1;
public static void displayToast(Context caller, String toastMsg, int toastType){
try {// try-catch to avoid stupid app crashes
LayoutInflater inflater = LayoutInflater.from(caller);
View mainLayout = inflater.inflate(R.layout.toast_layout, null);
View rootLayout = mainLayout.findViewById(R.id.toast_layout_root);
ImageView image = (ImageView) mainLayout.findViewById(R.id.image);
image.setImageResource(R.drawable.img_icon_notification);
TextView text = (TextView) mainLayout.findViewById(R.id.text);
text.setText(toastMsg);
Toast toast = new Toast(caller);
//toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setGravity(Gravity.BOTTOM, 0, 0);
if (toastType==SHORT_TOAST)//(isShort)
toast.setDuration(Toast.LENGTH_SHORT);
else
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(rootLayout);
toast.show();
}
catch(Exception ex) {// to avoid stupid app crashes
Log.w(TAG, ex.toString());
}
}
およびtoast_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toast_layout_root"
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:padding="10dp"
Android:background="#DAAA"
>
<ImageView Android:id="@+id/image"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_marginRight="10dp"
/>
<TextView Android:id="@+id/text"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:textColor="#FFF"
/>
</LinearLayout>