c# - android中的TextInputEditText没有获得焦点
问题描述
我在线性布局中有一个微调器和 2 个 TextInputEditText。
在一个片段中,我将此布局添加到弹出窗口中。对于微调器,我添加了一个带有图像和文本的自定义适配器。TextInputEditText 没有获得焦点,我尝试了所有可能的方法。
尝试了以下可能的条件
m_PopupWindow.Focusable = true;
m_PopupWindow.SoftInputMode = SoftInput.StateVisible;
m_PopupWindow.OutsideTouchable=(true);
m_PopupWindow.Touchable=(true);
m_PopupWindow.Update();
并且还尝试使用 TextInputEditText 单击事件使键盘聚焦,这能够打开键盘但 TextInputEditText 没有获得焦点。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:background="@drawable/popupBorder"
android:focusableInTouchMode="true"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:orientation="vertical"
android:gravity="center_horizontal">
<Spinner
android:id="@+id/spinner"
android:gravity="center_horizontal"
android:layout_width="328dp"
android:minWidth="15dp"
android:layout_height="wrap_content"
style="@style/mySpinnerItemStyle"
android:background="@drawable/bg_spinner"
android:layout_marginTop="40dp"/>
<android.support.design.widget.TextInputLayout
android:id="@+id/txtUserName"
android:layout_width="328dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
>
<android.support.design.widget.TextInputEditText
android:id="@+id/userNameEditText"
android:layout_width="328dp"
android:layout_height="wrap_content"
android:textIsSelectable ="true"
android:focusable="true"
android:imeActionLabel="Done"
android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/txtPassword"
android:layout_width="328dp"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true"
app:passwordToggleTintMode="src_atop"
app:passwordToggleTint="@drawable/selector_password_visibility_toggle"
app:passwordToggleDrawable="@drawable/ibk_visible"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_marginTop="16dp"
android:layout_marginBottom="20dp">
<android.support.design.widget.TextInputEditText
android:id="@+id/PasswordEditText"
android:layout_width="328dp"
android:layout_height="wrap_content"
android:imeActionLabel="Done"
android:singleLine="true"
android:inputType="textPassword"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
View objPopupview = LayoutInflater.From(ViewGroup.Context).Inflate(Resource.Layout.AddAccountTabPage, null);
m_PopupWindow = new PopupWindow(objPopupview, LayoutParams.WrapContent, LayoutParams.WrapContent, true);
m_PopupWindow.Focusable = true;
m_PopupWindow.SoftInputMode = SoftInput.StateVisible;
m_PopupWindow.OutsideTouchable=(true);
m_PopupWindow.Touchable=(true);
m_PopupWindow.Update();
txtUserNameEditBox.Click += delegate
{
txtUserNameEditBox.RequestFocus();
txtUserName.RequestFocus();
txtUserName.FocusableInTouchMode = true;
InputMethodManager imm = (InputMethodManager)ViewGroup.Context.GetSystemService(Context.InputMethodService);
imm.ShowSoftInput(txtUserName, ShowFlags.Forced);
imm.ToggleSoftInput(ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);
};
解决方案
你做错了几件事。
删除以下属性parent LinearLayout
// remove this from parent layouts
android:focusableInTouchMode="true"
您只能
android:focusableInTouchMode="true"
在父 ViewGroup 上使用,以便屏幕阅读器用户使用时一次性读取其内容keyboard navigation
,remote control
或者trackball
需要先选择视图,然后执行其他操作,例如单击 OK 以触发操作/焦点事件。
...
在触摸模式下可聚焦是一个应该谨慎使用的属性,并且只能在非常特定的情况下使用,因为它破坏了与正常 Android 行为的一致性。
除非您期望上述行为,否则该行是不必要的。
其次,从parent LinearLayout
. 我想这可能是您面临重大挑战的罪魁祸首:
// remove this from parent layouts
android:clickable="true"
当视图父级是clickable *OR* (focusable *AND* focusableInTouchMode)
它的 onTouch 事件时,它会拦截其子级的事件,这可能会导致意外行为阻止子级可点击。
还要注释掉以下行:
// comment this out
m_PopupWindow.Touchable=(true);
m_PopupWindow.Focusable = true;
此外,您可以通过在 xml 中添加标签来立即调用request focus
EditText<requestFocus />
<EditText...>
<requestFocus />
</EditText>
推荐阅读
- python - 如何在同一页面上处理 POST 请求和打印输出?
- haskell - fold 函数不断切换 var 位置
- google-apps-script - “无法从此上下文中调用 SpreadsheetApp.getUi()”错误,而未在基于时间的触发器上使用 getUi()
- python - 基于Django类的视图分页不起作用
- python - 调用 pd.values 时如何在列中取消嵌套列表
- autofac - 如何在未命名/不同命名的范围内保留对象实例?
- c - 如何用 C 创建菜单?
- python - 如何创建返回特定字典的函数?不知道从哪里开始
- tableau-api - 如何在 Tableau 中让参数忽略周末?
- c# - 从 excelreference 读取单元格值时引发“ExcelDna.Integration.XlCallException”类型的异常