带选择器的按钮在片段中不起作用
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
。
按钮选择器在 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
。