设置为可聚焦后,带有 Xamarin EditText 的 Android 无法使用

标签 android xamarin android-edittext focus

我在 Android Activity 中有一系列动态生成的 EditText。它们是基于以下 XML 生成的:

<?xml version="1.0" encoding="utf-8"?>
<EditText
 xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/customEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:textCursorDrawable="@null"
 />

在某些情况下,我想禁用它们但让它们保持可见。我通过将它们的 focusable 属性设置为 false 来做到这一点(我有理由使用 focusable 而不是 enabled):

 if (view2 is EditText)
     {
        ((EditText)view2).Focusable = false;
      }

当我想重新启用 EditText 时,我将 focusable 属性设置为 true:

  foreach (EditText disEditText in m_disabledEditTexts)
      {
          disEditText.Focusable= true;
      }

但是,这不会使 EditText 响应用户触摸它。我整个早上都在摆弄这个,但我一直无法解决!将 focusable 设置为 false 后,如何使 EditText 再次响应。 如果 EditText 没有将 focusable 设置为 false,它就可以正常工作。 这是用 C#/Xamarin 编写的

最佳答案

您还需要添加 FocusableInTouchMode 属性,以便它可以在触摸模式下再次聚焦。因此,您可能应该在将 Focusable 设置为 false 之后将 FocusableInTouchMode 设置为 true。

焦点处理

该框架将处理常规焦点移动以响应用户输入。这包括在移除或隐藏 View 时或在新 View 可用时更改焦点。 View 表明他们愿意通过 isFocusable() 方法获得焦点。要更改 View 是否可以获得焦点,请调用 setFocusable(boolean)。当处于触摸模式时(请参阅下面的注释), View 会通过 isFocusableInTouchMode() 指示它们是否仍希望获得焦点,并且可以通过 setFocusableInTouchMode(boolean) 更改此设置。

焦点移动基于在给定方向上找到最近邻居的算法。在极少数情况下,默认算法可能与开发人员的预期行为不匹配。在这些情况下,您可以通过在布局文件中使用这些 XML 属性来提供显式覆盖:

下一个FocusDown 下一个焦点向左 下一个FocusRight 下一步聚焦

要让特定 View 获得焦点,请调用 requestFocus()。

引用:http://developer.android.com/reference/android/view/View.htm

关于设置为可聚焦后,带有 Xamarin EditText 的 Android 无法使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34610821/

相关文章:

java - 我应该如何继续检查移动数据连接

android - 如何在android中处理网络请求

Android 3.x EditText 光标颜色

android - 如何以编程方式启用编辑文本的垂直滚动条

android - 将 Android Gradle 插件更新到 3.2.0 或更高版本/生成 Flutter 签名的 APK

Java,创建新对象如何影响堆大小?

xaml - 如何在 ContentPage 中显示 ContentView

Localizable.strings 文件中的 iOS 评论

android - 使用 Monodroid/Xamarin 绘制 Map 的空引用异常

android - 启动 Activity 时自动弹出键盘