Android:如何设置Toast文本的颜色

时间:2011-07-14 01:57:59

标签: android android-layout toast

我使用以下代码显示一个toast语句的结果:

Toast.makeText(getBaseContext(), "Please Enter Price", Toast.LENGTH_SHORT).show();

它在白色背景上显示为白色文字,因此无法读取!我的问题是,如何更改吐司文字的颜色?

10 个答案:

答案 0 :(得分:120)

您可以非常轻松地实现此目的,无需通过修改默认Toast来创建自定义布局:

Toast toast = Toast.makeText(this, resId, Toast.LENGTH_SHORT);
TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
v.setTextColor(Color.RED);
toast.show();

您可以在Android SDK中找到默认吐司视图使用的布局:

  

$ ANDROID-SDK $ /平台/机器人-8 /数据/ RES /布局/ transient_notification.xml

答案 1 :(得分:22)

您可以创建自定义Toast view以满足您的要求。请参阅http://developer.android.com/guide/topics/ui/notifiers/toasts.html

标题为“创建自定义Toast视图”的部分

答案 2 :(得分:15)

您可能想要创建自定义Toast

<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>

-

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
                           (ViewGroup) findViewById(R.id.toast_layout_root));

ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello! This is a custom toast!");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

Source

答案 3 :(得分:7)

更改吐司背景颜色和吐司文字背景颜色的最简单方法:

View view;
TextView text;
Toast toast;
toast.makeText(this, resId, Toast.LENGTH_SHORT);
view = toast.getView();
text = (TextView) view.findViewById(android.R.id.message);
text.setTextColor(getResources().getColor(R.color.black));
text.setShadowLayer(0,0,0,0);
view.setBackgroundResource(R.color.white);
toast.show();

答案 4 :(得分:4)

您也可以使用SpannableString。它也可以为字符串的部分着色。

SpannableString spannableString = new SpannableString("This is red text");
spannableString.setSpan(
                            new ForegroundColorSpan(getResources().getColor(android.R.color.holo_red_light)),
                            0,
                            spannableString.length(),
                            0);
Toast.makeText(this, spannableString, Toast.LENGTH_SHORT).show();

答案 5 :(得分:2)

尝试使用Toasty库。它真的很容易使用 - https://github.com/GrenderG/Toasty

enter image description here

答案 6 :(得分:1)

如果您不想使用任何自定义库,可以尝试一下

 Toast toast=Toast.makeText(getApplicationContext(),"This is advanced toast",Toast.LENGTH_LONG);
        View view=toast.getView();
        TextView  view1=(TextView)view.findViewById(android.R.id.message);
        view1.setTextColor(Color.YELLOW);
        view.setBackgroundResource(R.color.colorPrimary);
        toast.show();

答案 7 :(得分:0)

这里是Kotlin中的一个示例,展示了如何更改烤面包的背景颜色及其文本颜色:

val toast = Toast.makeText(context, text, Toast.LENGTH_SHORT)
toast.view.background.setColorFilter(ContextCompat.getColor(context, 
R.color.white), PorterDuff.Mode.SRC_IN)
val textView = toast.view.findViewById(android.R.id.message) as TextView
textView.setTextColor(ContextCompat.getColor(context, R.color.black))
toast.show()

答案 8 :(得分:0)

view 上设置自定义 Toast 的解决方案已弃用 API 30 及更高版本。

文档说

<块引用>

应用 * 针对后台的 API 级别 {@link Build.VERSION_CODES#R} 或更高级别 * 不会显示自定义 Toast 视图。

替代方案是

Toast.makeText(applicationContext,
                HtmlCompat.fromHtml("<font color='red'>custom toast message</font>", HtmlCompat.FROM_HTML_MODE_LEGACY),
                Toast.LENGTH_LONG).show()

Html 颜色标签也可以是 <font color='#ff6347'>

对于与显示的文本有关的每个修改,上述解决方案就足够了。例如,您可以通过插入 <b>my text</b> 将文本设为粗体,或者您可能希望将 font-family 更改为 <font font-family='...'> my text </font> 对于所有这些更改,该解决方案就足够了。

如果您想使用 background-color 之类的属性修改容器,唯一的选择是使用 Snackbar。不能再为 View 修改 Toast

答案 9 :(得分:0)

https://developer.android.com/guide/topics/ui/notifiers/toasts?hl=es-419#java

Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();