首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin Android辅助功能--我们如何通过编程方式将辅助功能焦点设置为UI元素(如按钮)

Xamarin Android辅助功能--我们如何通过编程方式将辅助功能焦点设置为UI元素(如按钮)
EN

Stack Overflow用户
提问于 2017-01-03 15:18:25
回答 1查看 1.1K关注 0票数 1

在我的Xamarin Android应用程序中,用户需要从旋转器(下拉菜单)中选择一项。从旋转器中选择任何项之后,可访问性焦点将转移到屏幕的开始,而不是下一个可调焦点元素,这不是预期的行为。因此,试图找到一种方式,以编程方式设置焦点按钮,但似乎没有办法在Xamarin Android。

我试过了

代码语言:javascript
复制
Button1.RequestFocus();

Button1.RequestFocusFromTouch();

Button1.SendAccessibilityEvent(EventTypes.ViewAccessibilityFocused);

但什么都没用!!

下面的代码示例与Xamarin iOS相关:

代码语言:javascript
复制
    UIAccessibility.PostNotification(UIAccessibilityPostNotification.ScreenChanged, myFirstElement);

这种方法在Xamarin iOS中可用,工作良好,因此需要类似的方式让Xamarin以编程方式聚焦。

在这里,我张贴样例代码。

我的.axml文件代码:

代码语言:javascript
复制
<?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>

我的活动档案

代码语言:javascript
复制
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版本中查看此场景。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-02-14 08:34:22

代码语言:javascript
复制
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));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41446669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档