Изменение цвета фона тоста
Я работаю над проектом и устанавливаю фон приложения на белый, делая следующее:
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:actionBarSize">140dp</item>
<item name="android:background">#ffffff</item>
</style>
Это работает, но проблема заключается в том, что тосты теперь отображаются с белым фоном. Странно, что я включил заставку в проект и когда пользователь регистрируется в сообщении тоста, отображается нормально.
Это действительно странно и было бы признательно за любую помощь в этом вопросе.
РЕДАКТИРОВАТЬ: ВЫПОЛНИТЬ ВЫПОЛНЕНИЕ СКРИНШОТА. Снимок экрана берется так же, как начальный тост (с нежелательным эффектом) исчезает, а новый (по умолчанию) затухает.
![enter image description here]()
Ответы
Ответ 1
Я решил проблему. Причина изменения цвета фона Toast была связана с тем, как я проходил в контексте объекта View, в котором он содержался.
Следующая строка кода приведет к изменению цвета фона на нежелательный белый цвет:
Toast.makeText(v.getContext(), "Checking login details...", Toast.LENGTH_SHORT).show();
Эта строка кода вернет Toast в системный стиль по умолчанию:
Toast.makeText(getApplicationContext(), "Checking login details...", Toast.LENGTH_SHORT).show();
Я не уверен, есть ли огромная проблема с его исправлением, поскольку я только изучаю. Если кто-то видит проблему, пожалуйста, поделитесь. Кажется, он работает нормально, хотя.
Ответ 2
Вы можете использовать представления, чтобы легко настраивать и стирать тосты. И, возможно, измените свой макет на файл toast_layout.
Отметьте этот пост для изменения фона тоста, чтобы он соответствовал теме Деятельности, это поможет вам
Ответ 3
Для меня использование getApplicationContext()
не было вариантом, а для других, у которых есть эта же проблема, вы можете просто установить Toast обратно в настройки по умолчанию, например:
//Create your Toast with whatever params you need
Toast toast = Toast.makeText(getActivity(), "Refreshing...", Toast.LENGTH_SHORT);
//Set the background for the toast using android default toast_frame.
//Optionally you can set the background color to #646464 which is the
//color of the frame
View view = toast.getView();
view.setBackgroundResource(android.R.drawable.toast_frame);
//Get the TextView for the toast message so you can customize
TextView toastMessage = (TextView) view.findViewById(android.R.id.message);
//Set background color for the text.
toastMessage.setBackgroundColor((Color.parseColor("#646464")));
toast.show();
Ответ 4
В дополнение к ответу WInthrop. Вместо того, чтобы устанавливать фоновый цвет текстового поля как # 646464, его можно настроить на прозрачность, чтобы тост выглядел как оригинальный полупрозрачный тост
private void showToast(Context context,String msg,int duration){
Toast toast = Toast.makeText(context,msg,duration);
View view = toast.getView();
view.setBackgroundResource(android.R.drawable.toast_frame);
TextView toastMessage = (TextView) view.findViewById(android.R.id.message);
toastMessage.setBackgroundColor(Color.TRANSPARENT);
toast.show();
}
Ответ 5
Вот что сработало для меня. Я взял код Sachin Murali G
private void showToast(Context context, String msg, int duration) {
Toast toast = Toast.makeText(context, msg, duration);
View view = toast.getView();
view.setBackgroundResource(android.R.drawable.toast_frame);
view.setBackgroundColor(Color.TRANSPARENT);
TextView text = view.findViewById(android.R.id.message);
text.setBackground(context.getResources().getDrawable(R.drawable.custom_toast));
text.setTextColor(context.getResources().getColor(R.color.colorPrimaryLight));
toast.show();
}
и добавил custom_toast.xml
в drawable
папке:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="22dp"/>
<solid android:color="@color/colorPrimary"/>
<padding
android:bottom="12dp"
android:left="20dp"
android:right="20dp"
android:top="12dp"/>
</shape>
Спасибо вам большое!
Ответ 6
Попробуй это:
toast.getView().setBackgroundColor(0xFF00ddff);