当前位置: 首页 > 知识库问答 >
问题:

如何在没有多个后台xml的情况下更改自定义祝酒词消息的背景?

丁鸿云
2023-03-14

我想更改自定义toast消息的背景,但不想为每种颜色创建新的xml文件。更具体地说;

这是我的custom_toast_border.xml文件,在drawable目录下。

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content"
android:layout_width="match_parent">
<stroke android:width="1dp" android:color="@color/toastGreen" />
<corners android:radius="0dp" />
<gradient android:startColor="@color/toastGreen"
    android:endColor="@color/toastGreen"
    android:angle="-90"/>

我的custom_toast.xml布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_toast_container"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@drawable/custom_toast_border"
android:layout_gravity="bottom|center_horizontal"
android:orientation="horizontal">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="80dp">

    <TextView
        android:id="@+id/tv_toast_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="@font/futura_book"
        android:padding="3dp"
        android:text="Toast Message"
        android:textAlignment="center"
        android:textColor="@color/black"
        android:textSize="17sp" />

</LinearLayout>

Java代码:

    ..... inflater = getLayoutInflater();
    layout = inflater.inflate(R.layout.custom_toast,null);
    toast_message = layout.findViewById(R.id.tv_toast_message);
    Toast toast = new Toast(getActivity().getApplicationContext());
        //View view = toast.getView(); //It is failed. Null object referance
        //view.getBackground().setColorFilter(getResources().getColor(R.color.toastRed), PorterDuff.Mode.SRC_IN);
        toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);
        toast.show();

我想为吐司背景三种不同的颜色。我是否必须为每种颜色创建单独的文件?(像custom_toast_border_red,..._green,.._yellow)。我无法在 Java 代码中更改背景颜色吗?请注意,我不想改变文字颜色,我想改变背景颜色。前面问题的大多数答案都解释了如何更改文本颜色。

共有2个答案

仰翔
2023-03-14

对于定制吐司,您可以尝试以下代码

 Toast ToastMessage = Toast.makeText(getApplicationContext(),"Change Toast Background color",Toast.LENGTH_SHORT);
 View toastView = ToastMessage.getView();
 toastView.setBackgroundResource(toast_background_color);
 ToastMessage.show();
储臻
2023-03-14
GradientDrawable containerDrawable = (GradientDrawable) layout.findViewById(R.id.custom_toast_container).getBackground();
containerDrawable.setColor(Color.GREEN); // CHANGE BG COLOR
containerDrawable.setStroke(1,Color.GREEN); // CHANGE THE STROKE COLOR
 类似资料:
  • 我已经挣扎了几天了。我对Spring Boot还是个新手,喜欢不使用XML配置的想法。 我创建了一个RESTfull应用程序(使用JSON)。我正在按照本教程正确配置身份验证。 可以使用 元素上的entry-point-ref属性设置AuthenticationEntryPoint。 没有提到任何关于如何使用Java配置来实现它的内容。 那么如何在不使用XML的情况下“注册”自己的以防止在使用Fo

  • Angular Material提供了各种特殊方法来向用户显示不显眼的警报。 它还为他们提供了一个术语吐司。 $ mdToast服务用于显示祝酒词。 例子 (Example) 以下示例显示了toasts的用法。 am_toasts.htm <html lang = "en"> <head> <link rel = "stylesheet" href = "htt

  • 有没有一种方法可以修改提交,而不弹出(或您的)来修改提交消息,而只是简单地重用前面的消息?

  • 在我的应用程序中,我为我的活动构造了一个日历小部件,当我滚动到上一个月或下一个月时,我让它祝酒并显示它。 问题是,祝酒词需要时间来显示,当我滚动得足够快时,比如我滚动到“2012/05”和“2012/06”,滚动到“2012/07”没有停顿,我就得等着“2012/05”、“2012/06”、“2012/07”的祝酒词一一慢慢显示。

  • 我试图将文本字段“Colorbox0”的背景色更改为“Value0”,但它去掉了边框。 以下是我代码的简化版本: 非常感谢您的帮助 谢谢

  • 所以我有一个扩展JPanel的“GameCourt”类。这个类覆盖paintComponent代码,以便绘制一些组件(迷宫、字符和一些硬币)。这个JPanel是扩展JLayeredPane的类的一部分,它有两层,一层用于绘制背景(使用扩展JPanel的BackgroundPanel类),另一层用于绘制我想要的所有元素(一个重置按钮,一个标签..) 所以我想要的是JLayeredPane中背景上方的