我有一个微调器和线性布局内的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"
您只能在父级ViewGroup上使用
android:focusableInTouchMode="true"
对于使用
keyboard navigation
,remote control
或trackball
的屏幕阅读器用户,所有内容将一次全部读取,这需要先选择视图,然后再执行其他操作,例如单击“确定”以触发操作/焦点事件。...
在触摸模式下可聚焦的属性应谨慎使用,并且仅在
非常特殊的情况,因为它破坏了与常规Android的一致性
行为。
除非您期望上述行为,否则不需要该行。
其次,从
parent LinearLayout
中删除以下属性。我想这可能是您面临的主要挑战的元凶:// remove this from parent layouts
android:clickable="true"
当视图父级为
clickable *OR* (focusable *AND* focusableInTouchMode)
时,其onTouch事件将拦截其子级的onTouch事件,这可能会导致意外行为,从而阻止子级被单击。还注释掉以下行:
// comment this out
m_PopupWindow.Touchable=(true);
m_PopupWindow.Focusable = true;
此外,您可以通过在xml中添加
request focus
标记在EditText上立即调用<requestFocus />
<EditText...>
<requestFocus />
</EditText>