3

基本上我希望搜索视图在有一个图像按钮时展开和折叠,当单击图标时它应该消失,当搜索视图折叠时应该出现视图。

我正在使用搜索视图而不是在操作栏中。当我单击搜索图标时,它只扩展了一半的屏幕,但它应该扩展完整的宽度,但是当我关闭搜索视图时应该是 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包装内容的设置不会有帮助。我会包装你的SearchViewand ImageButtonto RelativeLayout,你可以在其中指定相对于其他视图的视图位置。然后只需将SearchView宽度设置为填充父级,这样它就可以填充剩余空间。

于 2013-11-04T09:00:41.407 回答
4

您是否尝试过这里描述的 XML 属性 android:maxWidth:http: //developer.android.com/reference/android/widget/SearchView.html#attr_android :maxWidth

我正在使用来自 actionbarsherlock 的 SearchView 并使用相应的 java 方法将 SearchView 拉伸到操作栏的可用宽度上。

于 2014-01-16T09:52:45.487 回答
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 回答