Android:在Actionbar中为SearchView Widget添加自定义按钮

时间:2014-03-20 07:30:56

标签: android android-actionbar android-custom-view android-button searchview

我想为SearchView小部件添加一个自定义按钮。

通过search_view布局文件的源代码,我发现它有LinearLayoutsubmit_area),其中包含提交按钮和语音按钮。

所以我在submit_area中添加了一个动态按钮。但它没有显示我动态添加的按钮,因为如果未启用提交按钮或语音按钮,则submit_area将不可见。因此,如果我动态添加任何内容并不重要。

SearchView searchView = (SearchView) menuItem.getActionView(); 

int
submit_areaId = searchView.getContext().getResources()
    .getIdentifier("android:id/submit_area", null, null);

Button btnScan = new Button(getActivity());
btnScan.setText(getString(R.string.scan)); submitArea.addView(btnScan);  

但是如果我只是设置了提交按钮,那么它会显示提交按钮以及我的动态按钮,如附图所示。

我只想展示我的动态按钮。有任何线索如何实现?

enter image description here

2 个答案:

答案 0 :(得分:5)

searchView.setSubmitButtonEnabled(false);    
LinearLayout linearLayoutOfSearchView = (LinearLayout) searchView.getChildAt(0);
Button yourButton = new Button(mContext); // and do whatever to your button
linearLayoutOfSearchView.addView(yourButton);

答案 1 :(得分:2)

由于私有SearchView类方法正在设置submit_area Visibility.Gone,因此我们对此无能为力。

快速肮脏的技巧是设置默认按钮,然后将其宽度和高度设置为0.设置Visibility不起作用,因此必须设置高度/宽度。

我启用了搜索按钮,然后将其高度/宽度设置为零。

int submit_areaId = searchView.getContext().getResources().getIdentifier("android:id/submit_area", null, null);

ImageView submitImage = (ImageView) searchView.findViewById(search_go_btnId);

searchView.setSubmitButtonEnabled(true);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, 0);

submitImage.setLayoutParams(layoutParams);

现在,SearchView将显示您在submit_area中添加的任何内容。