在我的Xamarin Android应用程序中,用户需要从旋转器(下拉菜单)中选择一项。从旋转器中选择任何项之后,可访问性焦点将转移到屏幕的开始,而不是下一个可调焦点元素,这不是预期的行为。因此,试图找到一种方式,以编程方式设置焦点按钮,但似乎没有办法在Xamarin Android。
我试过了
Button1.RequestFocus();
Button1.RequestFocusFromTouch();
Button1.SendAccessibilityEvent(EventTypes.ViewAccessibilityFocused);但什么都没用!!
下面的代码示例与Xamarin iOS相关:
UIAccessibility.PostNotification(UIAccessibilityPostNotification.ScreenChanged, myFirstElement);这种方法在Xamarin iOS中可用,工作良好,因此需要类似的方式让Xamarin以编程方式聚焦。
在这里,我张贴样例代码。
我的.axml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Spinner
android:id="@+id/spinner"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp" android:focusable="true" android:focusableInTouchMode="true"/>
<Button
android:text="Add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnAdd"
android:focusable="true"
android:focusableInTouchMode="true"/>
</LinearLayout> </LinearLayout>我的活动档案
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
this.SetContentView (Resource.Layout.Main);
Spinner spinner = this.FindViewById<Spinner>(Resource.Id.spinner);
Button btnAdd = this.FindViewById<Button>(Resource.Id.btnAdd);
var adapter = ArrayAdapter.CreateFromResource(this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem);
adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
spinner.Adapter = adapter;
btnAdd.Click += (s, e) =>
{
string toasts = string.Format("Add button got focus");
Toast.MakeText(this, toasts, ToastLength.Long).Show();
};
}
private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
string toast = string.Format("The planet is {0}", spinner.GetItemAtPosition(e.Position));
Toast.MakeText(this, toast, ToastLength.Long).Show();
//btnAdd.RequestFocus();
btnAdd.RequestFocusFromTouch();
btnAdd.RequestFocus();
if (btnAdd.IsFocused)
{
string toasts = string.Format("Add button got focus");
Toast.MakeText(this, toasts, ToastLength.Long).Show();
}
skillSeleted = "selected";
}
protected override void OnResume()
{
base.OnResume();
if (skillSeleted == "selected")
{
btnAdd.RequestFocusFromTouch();
btnAdd.RequestFocus();
}
}
//Add this to String file under values folder:
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
请在三星移动( Samsung )的Marshmallow版本中查看此场景。
提前谢谢。
发布于 2022-02-14 08:34:22
public class MainPage : ContentPage {
public MainPage() => Content = BuildView().CreateView();
void SetState() => BuildView().Apply(Content);
int _counter;
Command _push => new Command(() => {
_counter++;
SetState();
});
ViewModel BuildView() =>
new StackLayoutModel(
children: new ViewModel[] {
new LabelModel(text: _counter.ToString(), fontSize: 42),
new ButtonModel(text: "Increment", command: _push),
},
padding: new Thickness(42));
}https://stackoverflow.com/questions/41446669
复制相似问题