Android SearchView - 向右移动图标(不带ActionBar)

时间:2015-10-13 15:13:11

标签: android searchview

我有一个像这样的Android SearchView -

 <SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:queryHint="Search the forum ..."
        android:iconifiedByDefault="true"
        android:id="@+id/search_forum"
        android:layout_alignParentRight="true"
        android:textColor="#aaa" />

这不在我的ActionBar中,它在我活动的其他地方。

我需要图标(搜索图标)保留在我的布局右侧。点击它应该扩展到SearchView(与ActionBar SearchView相同的行为)。我已尝试android:layout_alignParentRight="true",但图标位于左侧。

任何帮助都会很棒:)

8 个答案:

答案 0 :(得分:5)

我找到了解决这个问题的方法。只需将布局方向设置为&#34; rtl&#34;和图标将在右侧。这是我的搜索视图的代码,它按预期工作。

<SearchView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layoutDirection="rtl"
    android:iconifiedByDefault="true"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

答案 1 :(得分:2)

如果问题仍然没有答案:

将SearchView移动到RelativeLayout,并将其与父级的右侧对齐:

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.SearchView
    android:layout_width="wrap_content"
    android:id="@+id/searchView"
    android:layout_alignParentRight="true"
    android:layout_height="match_parent" />

最终结果如下:

CardView with Linearlayout containing aligned SearchView

答案 2 :(得分:1)

我找不到一个确切的答案,所以我这样做 - 使用搜索图标创建图像视图。将它放在我的布局右侧。 单击时,使搜索视图可见并设置图标化为false并请求焦点为搜索视图。

如果有人能帮我找到合适的解决办法,我会非常感激。

答案 3 :(得分:0)

将SearchView添加为菜单项而不是工具栏元素本身可以解决问题。

一种优雅的方式:

第1步 - 将搜索字段添加到工具栏:

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    app:showAsAction="always|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="Search"/>

第2步 - 将逻辑添加到onCreateOptionsMenu()

import android.support.v7.widget.SearchView; // not the default !

@Override
public boolean onCreateOptionsMenu( Menu menu) {
    getMenuInflater().inflate( R.menu.main, menu);

    MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
    searchView = (SearchView) myActionMenuItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            UserFeedback.show( "SearchOnQueryTextSubmit: " + query);
            if( ! searchView.isIconified()) {
                searchView.setIconified(true);
            }
            myActionMenuItem.collapseActionView();
            return false;
        }
        @Override
        public boolean onQueryTextChange(String s) {
            // UserFeedback.show( "SearchOnQueryTextChanged: " + s);
            return false;
        }
    });
    return true;
}

来源:https://stackoverflow.com/a/34255229/384564

答案 4 :(得分:0)

尝试一下:

 SearchView searchView =
       (SearchView) findViewById(R.id.search_view);
    searchView.setIconifiedByDefault(false);
    searchView.setIconified(false);

  ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);

    ViewGroup linearLayoutSearchView =
       (ViewGroup) searchViewIcon.getParent();
    linearLayoutSearchView.removeView(searchViewIcon);
    linearLayoutSearchView.addView(searchViewIcon);

来自here

答案 5 :(得分:0)

除工具栏外,我对SearchView的要求完全相同,即,当折叠的搜索图标应位于右端,而展开的图标应覆盖整个宽度时。

我已经在RelativeLayout中尝试了针对SearchView的解决方案。

<androidx.appcompat.widget.SearchView
    android:id="@+id/searchView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true" />

并对代码中的OnSearchClickListenerOnCloseListener进行处理,以在MATCH_PARENTWRAP_CONTENT之间切换宽度。

searchView.setOnSearchClickListener {
    val params = it.layoutParams as RelativeLayout.LayoutParams
    params.width = RelativeLayout.LayoutParams.MATCH_PARENT
    it.layoutParams = params
}

searchView.setOnCloseListener {
    val params = searchView.layoutParams as RelativeLayout.LayoutParams
    params.width = RelativeLayout.LayoutParams.WRAP_CONTENT
    searchView.layoutParams = params

    return@setOnCloseListener false
}

答案 6 :(得分:-1)

尝试这种方式它将起作用

SearchView search = (SearchView) item.getActionView();
    search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); 

答案 7 :(得分:-1)

以这种方式为我工作。我使用工具栏而不是ActionBar。

searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.RIGHT));