基本上我希望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 它说“添加到演员”
答案 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
来包装内容会有所帮助。我会将您的SearchView
和ImageButton
打包到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)
<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:
答案 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;
}
});