簡體   English   中英

Android SearchView - 向右移動圖標(不帶 ActionBar)

[英]Android SearchView - Move icon to right (without ActionBar)

我有一個像這樣的 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"但圖標停留在左邊。

任何幫助都會很棒:)

我找到了解決這個問題的方法。 只需將布局方向設置為“rtl”,圖標就會在右側。 這是我的搜索視圖的代碼,它按預期工作。

<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" />

我找不到確切的答案,所以我做了這個 - 創建一個帶有搜索圖標的圖像視圖。 把它放在我的布局的右邊。 單擊時,使搜索視圖可見並設置圖標化 false 並請求搜索視圖的焦點。

如果有人最終能幫我找到合適的解決方案,我將不勝感激。

如果問題仍然沒有答案:

只需將 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 包含對齊的 SearchView

添加 SearchView 作為菜單項而不是 Toolbar 元素本質上解決了這個問題。

一個優雅的方法:

第 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

除了工具欄之外,我對 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
}

嘗試這個:

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

取自這里

以這種方式為我工作。 我使用工具欄而不是 ActionBar。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM