3

基本的には、アイコンがクリックされたときに消え、searchviewが折りたたまれたときにビューが表示されるはずのイメージボタンがあるときに、searchviewを展開して折りたたむ必要があります。

アクションバーではなく検索ビューを使用しています。検索アイコンをクリックすると、画面の半分しか拡大されませんが、幅全体を拡大する必要がありますが、検索ビューを閉じるとwrap_contentにする必要があります。

<SearchView
        android:id="@+id/searchView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true">

私も試しました:

android.view.ViewGroup.LayoutParams params = searchview.getLayoutParams();
params.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

しかし、ここでsetLayoutParams「キャストに追加」というエラーが表示されます

4

4 に答える 4

6

最初は例外が発生します。これは、にある search_view.xml を調べると

\Android\android-sdk\platforms\android-18\data\res\layout\

SearchView は基本的に単純な LinearLayout であり、いくつかのウィジェットをまとめていることがわかります。そのため、クラスキャスト例外が発生しています。それ以外の

android.view.ViewGroup.LayoutParams params = searchview.getLayoutParams();

使用する

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) searchview.getLayoutParams();

または、正しいクラスをインポートするだけで、これを簡単に使用できます

import android.widget.LinearLayout.LayoutParams;

                      ...

LayoutParams params = (LayoutParams) searchview.getLayoutParams();

プレフィックスなしで LayoutParams を使用できるよりも。

LayoutParamsしかし、コンテンツをラップする設定が役立つとは思いません。と をラップSearchViewImageButtonRelativeLayout、他のビューに対するビューの位置を指定できます。次に、SearchView幅を親に合わせて設定するだけで、残りのスペースを埋めることができます。

于 2013-11-04T09:00:41.407 に答える
1

最初のスクリーンショット

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

    <item
        android:id="@+id/action_scan"
        android:icon="@drawable/scan_b"
        android:title="Scan"
        android:orderInCategory="2"
        app:showAsAction="ifRoom|collapseActionView" />

    <item
        android:id="@+id/action_add_cusomer"
        android:icon="@drawable/add_cust_b"
        android:title="Add Customer"
        android:orderInCategory="1"
        app:showAsAction="ifRoom|collapseActionView" />

</menu>

After Clicking on Search icon:

検索をクリックした後のスクリーンショット

于 2015-12-23T08:56:21.960 に答える
0

必要に応じてこれを試してみてください。ただし、独自のボタンで動作するとは思わないでください。wrap_content 幅パラメーターを指定してデフォルトの searchButton を右側に移動し、クリックして検索するときに幅を match_parent に設定し、閉じるときに幅を wrap_content に設定できます。

RelativeLayout の searchView の子を使用し、正しい LayoutParams(RelativeLayout.LayoutParams) について確認してください

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/counter_text_color" >

    <Button
        android:id="@+id/buttonLeftMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerInParent="true"
        android:background="@drawable/ic_drawer" />

    <ImageView
        android:id="@+id/iv_logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/actionbar_logo" />

    <TextView
        android:id="@+id/tw_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="YOUR "
        android:textSize="24sp" />

    <SearchView
        android:id="@+id/searchView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/buttonRightMenu" />

    <Button
        android:id="@+id/buttonRightMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerInParent="true"
        android:background="@drawable/ic_action_settings" />

</RelativeLayout>

そしてあなたのクラスで

searchView.setOnSearchClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.RIGHT_OF, R.id.buttonLeftMenu);
        params.addRule(RelativeLayout.LEFT_OF, R.id.buttonRightMenu);
        searchView.setLayoutParams(params);

    }
});

searchView.setOnCloseListener(new OnCloseListener() {

    @Override
    public boolean onClose() {
        // TODO Auto-generated method stub
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.LEFT_OF, R.id.buttonRightMenu);
        searchView.setLayoutParams(params);

        return false;
    }
});
于 2014-09-09T09:07:16.123 に答える