Android 4.3:不关注searchView不显示提示

时间:2017-10-11 06:44:59

标签: android searchview

Android Studio 2.3.3,Android 4.3。

在我的片段中,我有 searchView 组件(不在ToolBar中)。这是我的片段。

fragment_layout.xml:

__dirname.split('\\')    

在我的片段中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.SearchView
        android:id="@+id/searchView"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginEnd="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginStart="20dp"
        android:background="@drawable/search_view_bg"
        app:defaultQueryHint="@string/settings"
        app:searchHintIcon="@null" />   

</LinearLayout>

searchView 具有焦点时的结果:

Has focus

searchView 没有焦点时,结果如下: No focus

正如您可以看到提示仅在 searchView 处于焦点时显示。 但我还需要在 searchView 不在焦点时显示提示。我希望提示始终可见。

P.S。如果使用方法 private void init(View view) { searchView = view.findViewById(R.id.searchView); SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); searchView.setSuggestionsAdapter(new SearchCatalogSuggestionsAdapter(getActivity())); ViewCompat.setLayoutDirection(view.findViewById(R.id.searchView), ViewCompat.LAYOUT_DIRECTION_RTL); } ,则 searchView 自动获得焦点。但是,只有当用户点击 searchView 时才需要关注。

1 个答案:

答案 0 :(得分:2)

我找到了适用于Android 4.3 +的解决方案:

  1. 我使用麦克风图标,禁用点击它并将其替换为自定义图标(玻璃)

  2. 300毫秒后隐藏键盘(因为onActionViewExpanded()显示软键盘)

  3. 结果我有:

    1. searchView 未关注时显示提示
    2. searchView 处于焦点并且 searchView 未处于焦点时,右侧显示图标
    3. 这是我的代码:

      Java代码:

       ImageView voiceButtonIcon = view.findViewById(android.support.v7.appcompat.R.id.search_voice_btn);
              voiceButtonIcon.setImageResource(R.drawable.ic_search_black);
              voiceButtonIcon.setEnabled(false);
      
              // Workaround! Show hint when searchView has no focus
              searchView.onActionViewExpanded();
              new Handler().postDelayed(new Runnable() {
                  @Override
                  public void run() {
                      searchView.clearFocus();
                  }
              }, 300);
      

      layout xml:

      <android.support.v7.widget.SearchView
              android:id="@+id/searchView"
              android:layout_width="0dp"
              android:layout_height="48dp"
              android:layout_marginEnd="20dp"
              android:layout_marginLeft="20dp"
              android:layout_marginRight="20dp"
              android:layout_marginStart="20dp"
              android:background="@drawable/search_view_bg"
              android:theme="@style/SearchViewTheme"
              app:defaultQueryHint="@string/settings"
              app:searchHintIcon="@null" />
      

      结果: searchView 没有焦点:

      No_focus

      searchView 是焦点:

      Has_focus

      总是提示显示!