java - 在应用程序小部件中设置背景色调

标签 java android background-color android-appwidget

我想更改应用程序小部件中按钮的背景颜色。 因为我想保持普通 Android 按钮的形状,所以我考虑了 backgroundTint。我必须在小部件类的 onUpdate 方法中以编程方式设置颜色。

我尝试过:

views.setInt(buttonId, "setBackgroundColor", Color.parseColor("#ffffff"));

-> 也更改按钮形状

views.setInt(buttonId, "setBackgroundTint", Color.parseColor("#ffffff"));
views.setInt(buttonId, "setTint", Color.parseColor("#ffffff"));
views.setInt(buttonId, "setColorFilter", Color.parseColor("#ffffff"));

-> 小部件无法显示(logcat 中无错误代码)

views.setInt(buttonId, "setBackgroundTintList", colorStateList );

-> 期望 ColorStateList 不是 int...

您知道解决方案或简单的替代方案吗?

编辑: 更多代码:

AppWidget.java:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    for (int appWidgetId : appWidgetIds) {
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.app_widget);

            views.setCharSequence(buttonId, "setText", "TEXT");
            //views.setInt(buttonId, "setColorFilter", Color.parseColor("#ffffff"));

        }
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

app_widget.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llWidget"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false">

    <Button
        android:id="@+id/button"

        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight=".25"
        android:backgroundTint="@color/Color"
        android:text="string" />

</LinearLayout>

最佳答案

我最终做了@CommonsWare建议的事情。我为每种颜色创建了一个可绘制对象。根据状态(按下/未按下/...),它设置一个 .png 图像。我拍摄了标准 Android 按钮的图像并手动更改了它们的颜色。它们位于 ...\Android\Sdk\platforms\android-28\data\res 文件夹中的某个位置。

最后我使用以下代码将可绘制对象设置为背景:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.app_widget);
views.setInt(R.id.button, "setBackgroundResource", R.drawable.btn_color);

关于java - 在应用程序小部件中设置背景色调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568071/

相关文章:

java - 使用java连接hsql数据库

Android getWritableDatabase() 抛出 NullPointerException

jquery - 如果在其他地方单击,则更改背景颜色

java - 需要帮助在java中创建缩放列表方法

java - ListView setOnItemClickListener 未执行

java - 如何使用 Android Studio 从 Firebase 实时数据库中的节点检索特定数据?

css - 如何使用 CSS 检索用户输入的文本

macos - NSView 有背景颜色吗?如果有的话我找不到

java - 程序在执行简单的 for 循环时卡住

android - 无法获取博览会推送 token