i have a spinner and 2 TextInputEditText inside a linear layout.
inside a fragment i added this layout to the popup window. for spinner i added a custom adapter with image and text. the TextInputEditText are not getting focus, i tried all the possible ways.
tried with below possible conditions
m_PopupWindow.Focusable = true;
m_PopupWindow.SoftInputMode = SoftInput.StateVisible;
m_PopupWindow.OutsideTouchable=(true);
m_PopupWindow.Touchable=(true);
m_PopupWindow.Update();
and also tried getting the keypad to focus with TextInputEditText click event, with this able to open the keypad but the TextInputEditText is not getting the focus.
<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);
};
You are doing a couple of things wrong.
Remove the following attributes from parent LinearLayout
// remove this from parent layouts
android:focusableInTouchMode="true"
You only use
android:focusableInTouchMode="true"on parent ViewGroup so that its contents are read all at once for screen reader users making use ofkeyboard navigation,remote controlortrackballwhich would require the view to be first selected, then follows and extra action like click an OK to trigger action/focus events.
...
Focusable in touch mode is a property that should be used sparingly and only in very specific situations as it breaks consistency with normal Android behavior.
Unless you expect the above stated behaviour, that line is unnecessary.
Secondly, remove the following attributes from parent LinearLayout. This i guess may be the culprit of your major challenge:
// remove this from parent layouts
android:clickable="true"
When a view parent is clickable *OR* (focusable *AND* focusableInTouchMode) its onTouch event intercepts that of its children which can cause unexpected behavior preventing the children from being clickable.
Also comment out the following line:
// comment this out
m_PopupWindow.Touchable=(true);
m_PopupWindow.Focusable = true;
Further more you can call immediate request focus on your EditText by adding <requestFocus /> tag in xml
<EditText...>
<requestFocus />
</EditText>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With