软键盘没有出现在ActionBar中的触摸自定义EditText上

时间:2015-05-11 11:21:39

标签: android android-layout android-edittext

我有一个复杂的自定义视图,与pinterest搜索框非常相似。此组件只在EditText中显示Button和多个LinearLayout

当组件处于任何Fragment布局时,该组件可以使用相同的布局文件。这意味着当用户点击它时,soft-keyboard会显示EditText并正常工作 但是,当我尝试将此组件添加到我的自定义actionbar 时,它不起作用。这意味着,单击它不会显示soft-keyboard

我认为这是一个焦点问题,但我尝试调试并正常调用EditText onTouch方法。我还尝试使用descendantFocusability参数,但没有任何结果。

这是我的自定义ActionBar初始化

public void initializeCustomActionBar() {
    android.support.v7.app.ActionBar mActionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
    mActionBar.setDisplayShowHomeEnabled(true);
    mActionBar.setDisplayShowTitleEnabled(false);
    LayoutInflater mInflater = LayoutInflater.from(getActivity());

    View customView = mInflater.inflate(R.layout.actionbar_layout, null);
    mActionBar.setDisplayShowCustomEnabled(true);
    mActionBar.setCustomView(customView);
}

这是我的自定义ActionBar布局xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.my.package.customSearch
    android:id="@+id/pdt_actionbar_searchbox"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp" />

我正在以编程方式构建此自定义布局而不使用XML文件。出于某些原因,我将无法发布我的代码来构建此布局,但我绘制的图像在深层细节中解释了ActionBar布局的层次结构。

注意:我正在使用NavigationDrawer左侧菜单。我认为它的左侧菜单Button和我的EditText

之间的焦点存在冲突

enter image description here

3 个答案:

答案 0 :(得分:0)

在活动类在清单文件中声明的编辑文本活动中,你需要在下面添加这行代码,如图所示

内部活动android:windowSoftInputMode =&#34; stateAlwaysVisible&#34;

答案 1 :(得分:0)

您可以尝试将此行添加到操作栏按钮侦听器

your_view.getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

答案 2 :(得分:0)

您可以在设置自定义搜索视图后调用以下代码。 searchView应初始化为android.widget.searchview。

searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
     @Override
     public void onFocusChange(View v, boolean hasFocus) {
           if (hasFocus) {
               getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
           }
     }
}
searchView.requestFocus();

对于EditText,使用setOnFocusChangeListener或android:windowSoftInputMode =&#34; stateAlwaysVisible&#34;