searchview不扩展全宽

时间:2013-10-23 23:07:37

标签: android searchview layoutparams

基本上我希望searachview能够展开和折叠,当后面有一个图像按钮时,当点击图标时它应该消失,并且当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 个答案:

答案 0 :(得分:6)

首先你得到一个例外,因为如果你看看

中的search_view.xml
  

\的Android \ Android的SDK \平台\机器人-18 \数据\ RES \布局\

你会发现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来包装内容会有所帮助。我会将您的SearchViewImageButton打包到RelativeLayout,您可以在其中指定相对于其他视图的视图位置。然后只需设置SearchView宽度以填充父级,这样就可以填充剩余空间。

答案 1 :(得分:4)

您是否尝试过XML-attribute android:maxWidth,如下所述:http://developer.android.com/reference/android/widget/SearchView.html#attr_android:maxWidth

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

答案 2 :(得分:1)

first screenshot
    

    <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:

screenshot after clicking on search

答案 3 :(得分:0)

根据您的需要尝试这个但是不要想在你自己的按钮上工作,你可以通过给出wrap_content宽度参数将默认的searchButton移动到右侧,然后当你点击搜索set width到match_parent然后当你关闭它时再次设置width to 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;
    }
});