Я создал несколько пользовательских тем, которые помогают мне настраивать макеты в соответствии с предпочтениями пользователя. В моем приложении (Quiz-App) я меняю цвет кнопки, если это был правильный ответ. После этого я показываю диалог «correctAnswer» с onClick, где кнопки должны быть сброшены и снова получить свой нормальный цвет. Но так как я использую пользовательские темы, я не могу этого достичь. Любая помощь приветствуется!
Моя тема. xml:
<style name="Theme.Custom1" parent="Theme.AppCompat.NoActionBar">
<item name="background">@color/Red</item>
<item name="arrow">@color/RedDark</item>
<item name="toolbar">@color/RedDark</item>
<item name="text">@color/Gold</item>
<item name="button">@drawable/button_custom1</item>
</style>
Мой макет. xml, где пользовательская тема назначается первой:
<Button
android:id="@+id/buttonA2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="9dp"
android:layout_marginLeft="9dp"
android:layout_marginEnd="9dp"
android:layout_marginRight="9dp"
android:layout_marginBottom="16dp"
**android:background="?button"**
android:onClick="buttonA2"
android:textColor="@color/white"
app:layout_constraintBottom_toTopOf="@+id/buttonB2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
Код, в котором я меняю цвет на зеленый и диалог для сброса:
public void buttonA2(View view) {
if (currentQuestion.getOptb().equals(currentQuestion.getAnswer())) {
**buttonA2.setBackground(getResources().getDrawable(R.drawable.button_correct));**
if (qid < list.size() - 1) {
disableButton();
**correctDialog();**
} else {
gameWon();
}
} else {
gameLostPlayAgain();
}
}
resetColor () вызывается в correctDialog:
public void resetColor() {
buttonA2.setBackground(getResources().getDrawable(R.drawable.button_custom));
buttonB2.setBackground(getResources().getDrawable(R.drawable.button_custom));
buttonC2.setBackground(getResources().getDrawable(R.drawable.button_custom));
buttonD2.setBackground(getResources().getDrawable(R.drawable.button_custom));
}
Этот resetColor работал до того, как я начал использовать пользовательские темы .. теперь у меня есть 4 различные темы, установленные в настройках пользователей, и не только одна рисуемая кнопка "button_custom", но и 4 из них (button_custom1 до 4). Короче говоря: в resetColor мне нужно знать, какая пользовательская тема использовалась на кнопке, прежде чем я изменил цвет на зеленый и снова установил фон для этой пользовательской темы (например, рисовать внутри пользовательской темы).
Большое спасибо заранее!
РЕДАКТИРОВАТЬ: Я уже пробовал некоторые вещи, как это без какого-либо полезного результата:
Drawable buttonBack = buttonA2.getBackground();
String buttonBackground = buttonBack.toString();
System.out.println(buttonBackground);
int i = getResources().getIdentifier("tb.quiz:drawable/" + buttonBackground, null, null);
System.out.println(i);
buttonA2.setBackground(getResources().getDrawable(i));
Еще одна попытка была с Resources.Theme buttonBack = this.getTheme();
вместо Drawable buttonBack