C# android中的TextInputItemText未获得焦点

C# android中的TextInputItemText未获得焦点,c#,android,xamarin.android,android-edittext,android-textinputedittext,C#,Android,Xamarin.android,Android Edittext,Android Textinputedittext,我在线性布局中有一个微调器和两个文本输入文本 在一个片段中,我将这个布局添加到弹出窗口中。 对于微调器,我添加了一个带有图像和文本的自定义适配器。 文本输入文本无法获得焦点,我尝试了所有可能的方法 在以下可能的条件下进行试验 m_PopupWindow.Focusable = true; m_PopupWindow.SoftInputMode = SoftInput.StateVisible; m_PopupWindow.OutsideTouchable=(true); m_PopupWi

我在线性布局中有一个微调器和两个文本输入文本

在一个片段中,我将这个布局添加到弹出窗口中。 对于微调器,我添加了一个带有图像和文本的自定义适配器。 文本输入文本无法获得焦点,我尝试了所有可能的方法

在以下可能的条件下进行试验

m_PopupWindow.Focusable = true;
 m_PopupWindow.SoftInputMode = SoftInput.StateVisible;
 m_PopupWindow.OutsideTouchable=(true);
 m_PopupWindow.Touchable=(true);
 m_PopupWindow.Update();
还尝试通过TextInputItemText单击事件使键盘聚焦,这样可以打开键盘,但TextInputItemText无法获得焦点

<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);
                };

View objPopupview=LayoutInflater.From(ViewGroup.Context).Inflate(Resource.Layout.AddAccountTabPage,null);
m_PopupWindow=新的PopupWindow(objPopupview,LayoutParams.WrapContent,LayoutParams.WrapContent,true);
m_PopupWindow.Focusable=true;
m_PopupWindow.SoftInputMode=SoftInput.StateVisible;
m_PopupWindow.OutsideTouchable=(真);
m_poppwindow.Touchable=(真);
m_PopupWindow.Update();
txtUserNameEditBox。单击+=委托
{
txtUserNameEditBox.RequestFocus();
txtUserName.RequestFocus();
txtUserName.FocusableInTouchMode=true;
InputMethodManager imm=(InputMethodManager)ViewGroup.Context.GetSystemService(Context.InputMethodService);
imm.showsoftwinput(txtUserName,ShowFlags.Forced);
ToggleSoftInput(ShowFlags.Forced、HideSoftInputFlags.ImplicitOnly);
};

你做错了几件事

从父线性布局中删除以下属性

// remove this from parent layouts
android:focusableInTouchMode="true" 
您只能在父视图组上使用android:focusableInTouchMode=“true”,以便 使用
键盘导航
遥控器
轨迹球
屏幕阅读器用户可以一次读取所有内容,这需要首先选择视图,然后再执行其他操作,如单击确定以触发操作/焦点事件

在触摸模式下可聚焦是一个应该谨慎使用的属性,并且仅在触摸模式下使用 非常特殊的情况,因为它破坏了与普通Android的一致性 行为

除非您预期上述行为,否则该行是不必要的

其次,从父线性布局中删除以下属性。我想这可能是你主要挑战的罪魁祸首:

// remove this from parent layouts
android:clickable="true"  
当视图父视图是
clickable*或*(focusable*和*focusableInTouchMode)
其onTouch事件截获其子视图的onTouch事件,这可能导致意外行为,阻止子视图被单击

同时注释掉以下行:

// comment this out
m_PopupWindow.Touchable=(true);
m_PopupWindow.Focusable = true;
此外,您还可以通过在xml中添加
标记,在EditText上调用immediate
request focus

<EditText...>
    <requestFocus />
</EditText>

您可以尝试删除根布局中的以下代码

   android:descendantFocusability="blocksDescendants"
注:
当您将
blocksDescendants
设置为
android:genderantfocusability
时,视图组将阻止其后代接收焦点。

Hi@GiddyNaya感谢您的回复,我尝试了上述建议,设置标记后,编辑文本将获得焦点,但文本不会进入文本框,而且如果我们在我的版面中为两个编辑文本设置标记,则两个文本一次都将获得焦点。您只能对版面中的一个视图使用
标记,也可以删除行
android:textIsSelectable=“true”
从您的
文本输入文本
。默认情况下它是可选择的。我尝试了所有提到的场景,但我认为还有一些其他问题,因为即使是编辑文本也获得了焦点,而不是我们正在输入的文本。感谢大家的建议,但不幸的是,没有任何效果,但我只是删除了线性布局,并将整个控件放置在表格布局中,效果很好,不知道确切的问题,但这一个解决了问题。