7

SearchViewを常に展開し、ActionBarにもう1つのボタンを表示して、ユーザーがSearchActivityの検索文字列にすばやくアクセスできるようにする必要があります。
私は自分の活動のためにこのメニューレイアウトを持っています:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="always"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"/>
    <item android:id="@+id/action_configure"
        android:title="@string/action_configure"
        android:icon="@android:drawable/ic_menu_preferences"
        android:showAsAction="always" />
</menu>

そして、検索アクティビティクラスで、ActionBarを次のように構成します。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.search, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
    searchView.setSubmitButtonEnabled(false);
return true;
}

問題は、私がそうするsearchView.setIconifiedByDefault(false);と、この写真が表示されることです。
ここに画像の説明を入力してください

2番目のメニュー項目がないことに気付くでしょう。ここで、android:showAsAction = "always | collapsActionView"を設定すると、デフォルトで折りたたまれますが、2番目のアイテムが表示されます。
ここに画像の説明を入力してください
上の画像では、すでに検索アイコンを押しています。

私が理解できない2つの問題があります:

  1. 拡張検索ビューと構成アクションのアイコンの2つの要素を常に表示するにはどうすればよいですか?
  2. この醜い2番目の検索アイコンを取り除くにはどうすればよいですか?
4

3 に答える 3

3

これが、内側の検索アイコンを非表示にするための私の解決策です。

テーマを管理するstyles.xmlで、以下をapplication_themeセクション(通常はbase_themeの下)に追加します。

<!--Application Theme-->
<style name="application_theme" parent="application_base_theme">
    <item name="searchViewSearchIcon">@android:color/transparent</item>
    <item name="searchViewCloseIcon">@android:color/transparent</item>
</style>

これにより、アクションバー検索ウィジェット内で出現するすべての検索アイコンが透明になり、非表示になります。

ただし、テキストフィールドのスペースは引き続き使用され、アイコンがあった左側に非表示の余白が作成されます。これを修正したい場合は、代わりにcom.actionbarsherlock.widget.SearchViewを独自のクラスで拡張し、以下を追加する必要があります。

ImageView searchHintIcon = (ImageView) findViewById(R.id.abs__search_mag_icon);
searchHintIcon.setVisibility(View.GONE);

これをコンストラクターに追加しますが、setIconifiedとsetIconifiedByDefaultをオーバーライドして、そこにも含めます。これにより、アクションビューを展開するたびに、アイコンが強制的に非表示になります。

アクションバーに他のアイコンを表示するには、次の設定を試してください。

android:showAsAction="collapseActionView|ifRoom"

これにより、アクションバーに十分なスペースがある場合、検索バーが完全にバーから外れるのではなく、検索バーが拡張されます。

HTH

于 2013-07-15T16:40:51.507 に答える
3

私はそれを使用してそれを修正することができました

mySearchView.setIconfied(false); 

setIconifiedByDefault()ではなく

PS私はandroid.support.v7.widget.SearchViewを使用していました

于 2013-11-20T16:37:49.080 に答える
0

2つの要素の表示を解決する私の方法は、SearchViewに特定の幅を設定することでした。

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT);
searchView.setLayoutParams(lp);

私が使用しているコードは次のとおりです。

res / menu / main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:showAsAction="always"
        android:title="@string/action_search"/>
    <item
        android:id="@+id/settings"
        android:showAsAction="ifRoom"
        android:onClick="startSettingsActivity"
        android:title="@string/action_settings"/>
</menu>

そして私の活動では

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.main, menu);
    MenuItem searchViewItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) searchViewItem.getActionView();
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT);
    searchView.setLayoutParams(lp);

    searchView.setIconifiedByDefault(false);
    searchView.setSubmitButtonEnabled(false);

    return true;
}

public void startQuickSearchActivity(MenuItem menuItem){
    startActivity(new Intent(this, QuickSearchActivity_.class));
}
于 2013-05-08T04:57:31.743 に答える