我在 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/