установка backgroundTint в виджете приложения - PullRequest
0 голосов
/ 12 июня 2019

Я хочу изменить цвет фона кнопки в моем виджете приложения. Поскольку я хочу сохранить форму обычной кнопки 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 ...

Знаете ли вы решение или простую альтернативу?

Edit: Еще немного кода:

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>

1 Ответ

0 голосов
/ 13 июня 2019

Я закончил тем, что сделал что-то вроде @CommonsWare.Я создал Drawable для каждого цвета.В зависимости от состояния (нажата / не нажата / ...) устанавливается изображение в формате .png.Я взял изображения стандартных кнопок Android и изменил их цвет вручную.Они находятся где-то в папке ... \ Android \ Sdk \ platform \ android-28 \ data \ res.

Наконец, я установил чертеж в качестве фона, используя следующий код:

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