Android Xamarin EditText 在设置为可聚焦后无法使用
Android with Xamarin EditText is unusable after being set as focusable
我在 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 时,我将可聚焦 属性 设置为 true:
foreach (EditText disEditText in m_disabledEditTexts)
{
disEditText.Focusable= true;
}
但是,这不会使 EditText 响应用户触摸它。我整个早上都在摆弄这个,但我一直无法解决!将 focusable 设置为 false 后,如何使 EditText 再次响应。
如果 EditText 没有将 focusable 设置为 false,它就可以正常工作。
This is written in C# / Xamarin
.
您还需要添加 FocusableInTouchMode
属性 以便它可以在触摸模式下再次聚焦。也就是说,在将 Focusable
设置为 false 之后,您可能应该将 FocusableInTouchMode
设置为 true。
焦点处理
该框架将处理常规焦点移动以响应用户输入。这包括在移除或隐藏视图时或在新视图可用时更改焦点。视图表明他们愿意通过 isFocusable() 方法获得焦点。要更改视图是否可以获得焦点,请调用 setFocusable(boolean)。当处于触摸模式时(请参阅下面的注释),视图会通过 isFocusableInTouchMode() 指示它们是否仍希望获得焦点,并且可以通过 setFocusableInTouchMode(boolean) 更改此设置。
焦点移动基于在给定方向上找到最近邻居的算法。在极少数情况下,默认算法可能与开发人员的预期行为不匹配。在这些情况下,您可以通过在布局文件中使用这些 XML 属性来提供显式覆盖:
nextFocusDown
下一个焦点向左
下一个FocusRight
下一个焦点
要使特定视图获得焦点,请调用 requestFocus()。
参考:http://developer.android.com/reference/android/view/View.htm
我在 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 时,我将可聚焦 属性 设置为 true:
foreach (EditText disEditText in m_disabledEditTexts)
{
disEditText.Focusable= true;
}
但是,这不会使 EditText 响应用户触摸它。我整个早上都在摆弄这个,但我一直无法解决!将 focusable 设置为 false 后,如何使 EditText 再次响应。
如果 EditText 没有将 focusable 设置为 false,它就可以正常工作。
This is written in C# / Xamarin
.
您还需要添加 FocusableInTouchMode
属性 以便它可以在触摸模式下再次聚焦。也就是说,在将 Focusable
设置为 false 之后,您可能应该将 FocusableInTouchMode
设置为 true。
焦点处理
该框架将处理常规焦点移动以响应用户输入。这包括在移除或隐藏视图时或在新视图可用时更改焦点。视图表明他们愿意通过 isFocusable() 方法获得焦点。要更改视图是否可以获得焦点,请调用 setFocusable(boolean)。当处于触摸模式时(请参阅下面的注释),视图会通过 isFocusableInTouchMode() 指示它们是否仍希望获得焦点,并且可以通过 setFocusableInTouchMode(boolean) 更改此设置。
焦点移动基于在给定方向上找到最近邻居的算法。在极少数情况下,默认算法可能与开发人员的预期行为不匹配。在这些情况下,您可以通过在布局文件中使用这些 XML 属性来提供显式覆盖:
nextFocusDown 下一个焦点向左 下一个FocusRight 下一个焦点
要使特定视图获得焦点,请调用 requestFocus()。
参考:http://developer.android.com/reference/android/view/View.htm