Я пытаюсь обновить свой проект Xamarin. Android для цели Android 10 и Visual Studio 2019, но есть ошибка, которую я не могу устранить.
У меня есть пользовательские состояния для некоторых компонентов, но их условие игнорируется и всегда показывает "true", кроме случаев, когда другое состояние по умолчанию в android активно и находится выше в иерархии. Вот пример кода:
Attrs. xml
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<declare-styleable name="CustomStates">
<attr name="state_error" format="boolean"/>
</declare-styleable>
</resources>
CustomButton. xml
<?xml version="1.0" encoding="UTF-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto/XXXX.XXXX.XXXX">
<item android:state_enabled="false"
android:drawable="@drawable/DisabledButton"/>
<item app:state_error="true"
android:drawable="@drawable/ErrorButton"/>
<item android:state_pressed="true"
android:drawable="@drawable/PressedButton"/>
<item android:drawable="@drawable/DefaultButton"/>
</selector>
CustomButton.cs
public class CustomButton : ImageButton
{
private static int[] errorState = { Resource.Attribute.state_error };
private bool error;
...
public bool Error
{
get
{
return this.error;
}
set
{
this.error = value;
this.RefreshDrawableState();
}
}
public override int[] OnCreateDrawableState(int extraSpace)
{
int[] state = base.OnCreateDrawableState(extraSpace + 1);
if (this.error)
{
LoginButton.MergeDrawableStates(state, errorState);
}
return state;
}
}
Мое приложение всегда показывает @ drawable / ErrorButton, даже если для свойства Error установлено значение false. Единственный случай, когда @ drawable / ErrorButton не отображается, это когда кнопка отключена (правильно отображается @ drawable / DisabledButton).
Этого не происходит в Visual Studio 2017 с таргетингом Android 9. Я выполнение теста на одних и тех же устройствах (Android 5.1 и Android 7.1).