安卓 - 使整个搜索栏可点击

50

我在我的片段中使用search-view元素来实现搜索功能。

<SearchView
    android:id="@+id/search_bar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="7dp"
    android:layout_marginLeft="7dp"
    android:layout_marginRight="7dp"
    android:layout_marginBottom="7dp"
    android:background="@color/white" />

在此输入图片描述

问题在于只有搜索图标是可点击的,搜索栏的其他区域不可点击,当我点击图标时才能进行搜索。

在此输入图片描述

请问您能否帮助我使整个搜索区域都可以被点击。

在此输入图片描述


1
εΑùη·ïε€®SearchViewδΗäφΖΜεä†android:clickable="true"ψIJ - Lamorak
如果您要将其设置为可点击以进行搜索,那么为什么您要编辑其中写入的文本而不是聚焦于它? - pratz9999
@Lamorak:在我的代码中添加android:clickable =“true”后它仍然无法正常工作。现在其他区域也无法点击开始搜索。 - Saran
@Lamorak:你能帮我解决一下问题吗? - Saran
3
@Saran 将此添加到您的 xml searchview 中 android:iconifiedByDefault="false" .. 如果我要求您添加一个类似于搜索图标的图像按钮,可以吗? - pratz9999
显示剩余3条评论
14个回答

93

在搜索视图的 OnClick 中将 Iconified 设置为 false 即可轻松完成。

searchBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchBar.setIconified(false);
    }
});

参考资料: Eric Lui的回答

希望这能有所帮助。

更新:

你也可以直接在你的XML中使用它。

app:iconifiedByDefault="false"

当我点击图标外部区域时,是否有可能进入onClick方法?在这种情况下,我想扩展我的listview。 - f.trajkovski
运行得非常顺利! - Ivan
注意:searchBar.onActionViewExpanded()无法正常工作,因为它没有向用户显示退出搜索的X。 - hyena
app:iconifiedByDefault="false" - 对我无效。只有 setOnClickListener 方法有效。 可能与 <android.support.v7.widget.SearchView> 和 <SearchView> 之间的差异有关。 我只在 <SearchView> 上进行了测试。 - mr.kostua

18
search_bar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        search_bar.onActionViewExpanded();
    }
});

android.support.v7.widget.SearchView的最简单解决方案 - Kishan Solanki

13

关键不在于让整个区域可点击,而是要扩大它并隐藏键盘。

首先,在XML中保留原有布局不变,在Java中,你需要添加以下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    //Define your Searchview
    SearchView searchView = (SearchView) findViewById(R.id.search_bar);

    //Turn iconified to false:
    searchView.setIconified(false);
    //The above line will expand it to fit the area as well as throw up the keyboard

    //To remove the keyboard, but make sure you keep the expanded version:
    searchView.clearFocus();
}

这样做的作用是将键盘扩展到整个区域,使其成为焦点,从而使整个区域可点击,然后移除键盘,以便用户看起来可以单击该字段并弹出键盘。

应该能够实现您所需的功能。

-Sil


2
这是简单而清晰的。 - user3290180

12
android:iconifiedByDefault="false" 添加到您的 XML 中,它会保持搜索视图处于打开状态。要清除搜索视图,将clearfocus添加到您的搜索视图对象中。

1
这个代码可以工作,但是要用 app 替换 androidapp:iconifiedByDefault="false" - rexxar

7

可点击意味着什么?触发搜索操作还是只使编辑区域聚焦?如果是前者,您可以将图标设置为clickable=false,并使整个布局可点击并实现事件监听器。

<SearchView
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:click="onClick"
android:layout_marginTop="7dp"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:layout_marginBottom="7dp"
android:background="@color/white" />

onClick方法应该是

public void onClick(View v) {
   InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
    im.showSoftInput(editText, 0);
}

4
Clickable的意思是:当搜索框没有聚焦时,我点击搜索框的任何位置都应该开始搜索过程。 - Saran
当您触摸编辑区域时,会发生什么操作?编辑您想要搜索的内容还是直接搜索?您可以在按下“回车键”时实现键事件监听器。 - Sethbrin
2
答案并没有解决我的问题。 - Saran
1
我在一个片段中使用了SearchView,当我想要输入任何内容时,我只能点击搜索框中的放大镜图标,然后搜索栏会聚焦并触发键盘,但我的要求是现在“当触摸整个SearchView区域时,应该让整个区域聚焦,并打开键盘”... - Saran
1
现在我的问题表述清楚了吗? - Saran
显示剩余3条评论

5

针对最新版本的Android - 建议尝试:

app:iconifiedByDefault="false"

示例 -

<android.support.v7.widget.SearchView
android:id="@+id/source_location_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="15dp"
android:layout_marginRight="20dp"
app:iconifiedByDefault="false"
app:queryHint="Your hint text" />

你知道在哪个版本的Android应用程序中,app:iconifiedByDefault="false"是解决方案吗? - Gauri Gadkari

4
searchView.setIconified(false);

3

只需要在xml中写入即可

android:iconifiedByDefault="false"

对我来说可行

2
使用这个
searchView.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            searchView.onActionViewExpanded();
            OR
            searchView.setIconified(false);
        }
    });

    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            if(!b)
            {
                if(searchView.getQuery().toString().length() < 1)
                {
                    searchView.setIconified(true); //close the search editor and make search icon again
                    OR
                    searchView.onActionViewCollapsed();
                }

                searchView.clearFocus();

            }
        }
    });

2

请在您的Java文件中编写以下代码行:

SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setQueryHint("Enter your address");
searchView.setIconified(false);
searchView.clearFocus();

在此之后,不要忘记在SearchView标签内部的XML文件中写入android:focusable="true"
例如:
<SearchView 
android:id="@+id/searchView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:focusable="true" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接