带选择器的按钮在片段中不起作用

Button with selector not working in fragment

按钮选择器在 Fragment 中应用时不起作用。它在 AppCompatDialogFragment 中工作,但在通过 FragmentTransaction 实例化的常规 Fragment 中不工作。这是我的实例化代码:

    var transaction = SupportFragmentManager.BeginTransaction();
    var grpFragment = new GroupsFragment();

    transaction.Replace(Resource.Id.fragment_frame, grpFragment, GroupsFragment.Tag);
    transaction.Commit();

GroupsFragment.OnViewCreated:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    var view = inflater.Inflate(Resource.Layout.fragment_groups, container, false)!;
    Initialize(view);

    return view;
}

fragment_groups.xml布局中:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/platin_white">

    ...

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/selector_button"
        android:text="Cancel"/>

    ...

</androidx.coordinatorlayout.widget.CoordinatorLayout>

selector_button.xml中:

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_enabled="true">
        <shape android:shape="rectangle">
        
            <solid android:color="@color/danger_dark" />
            <corners android:radius="10dp" />
            <padding android:left="20dp" android:right="20dp" android:top="10dp" android:bottom="10dp" />
        
        </shape>
    </item>
    <item android:state_enabled="true">
        <shape android:shape="rectangle">
            
            <solid android:color="@color/danger" />
            <corners android:radius="10dp" />
            <padding android:left="20dp" android:right="20dp" android:top="10dp" android:bottom="10dp" />
        
        </shape>
    </item>
</selector>

关于如何修复它的任何想法?

我在一个 Xamarin.Android 项目和一个 Xamarin.Forms 项目中测试了你的代码。在 android 项目中,即使我尝试将按钮添加到 activity.xml 中也没有任何效果。但在表单项目的 android 部分,它运行良好。所以这可能是xamarin.android中的一个特殊问题。您可以尝试创建一个 Forms 项目并在其中的 android 部分执行此操作。另外,你可以尝试在 Xamarin.Android.

中添加一个问题

我不确定是将此称为解决方案还是解决方法,但是我设法通过使用 AndroidX 的 AppCompatButton 而不是传统的 Button.[=17= 解决了选择器问题]

刚刚替换了这个:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/selector_button"
    android:text="Cancel"/>

通过以下方式:

<androidx.appcompat.widget.AppCompatButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/selector_button"
    android:text="Cancel"/>

我还将自定义 Button 样式的父级更改为 Widget.AppCompat.Button 而不是 @android:style/Widget.Button