我旁边有一个搜索查看和按钮。按钮显示为GONE。在searchview上输入内容时,我想显示按钮。我的问题是它没有正确显示按钮,即使我将可见性提升为可见。
svSearchSentItem.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
btnClear.setVisibility(View.VISIBLE);
preLast = 0;
isQuickSearch = true;
currentMailInboxListMap = new ArrayList<Map<String, String>>();
setSentItemListView(query, 0, 50, true,false);
((DashboardActivity)getActivity()).mailSentSearchQuery=query;
searchCycle = 1;
svSearchSentItem.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (newText.isEmpty()) {
}
else
{
btnClear.setVisibility(View.VISIBLE);
}
return false;
}
});
XML布局
LinearLayout
android:orientation="horizontal"
android:focusable="true"
android:focusableInTouchMode="true"
android:weightSum="8"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:id="@+id/layoutSearch">
<SearchView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/svMailSent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:hint="Search"
android:autoText="true"
android:inputType="text"
android:queryHint="Search"
android:layout_weight="6"
android:layout_centerInParent="true"
android:iconifiedByDefault="false"
/>
<Button
android:id="@+id/btnSentSearchClear"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:text="Clear"
android:textAllCaps="false"
android:layout_weight="2"
android:visibility="gone"/>
</LinearLayout>
答案 0 :(得分:0)
你可以使用ajax和android来检查searchview是否为空,如果它不是空的,那么make view.visible else view.gone。
http://programmerguru.com/android-tutorial/android-ajax-auto-load
这可能会有所帮助!
答案 1 :(得分:-1)
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_weight="2"
当你使用layout_weight时,你需要设置一个属性:height或width to 0dp:
android:layout_height="0dp"
android:layout_width="0dp"
https://developer.android.com/guide/topics/ui/layout/linear.html
重量(浮子重量)
指示LinearLayout中多少额外空间将分配给与这些LayoutParams关联的视图。如果不应拉伸视图,请指定0。否则,额外像素将在权重大于0的所有视图中按比例分配。
我建议您删除所有属性并首先设置:
如果它你会看到你想要的东西那么你可以通过这种方式添加一些额外的属性,你会看到它失败:)
使用此并报告结果:
<LinearLayout
android:id="@+id/layoutSearch"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="8">
<SearchView
android:id="@+id/svMailSent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="6"/>
<Button
android:id="@+id/btnSentSearchClear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
</LinearLayout>
@ ceph3us,我按照你的建议更改了布局。但我仍然看不到按钮。它似乎正在屏幕外的右上角 - 创意专业
您正在严重嵌入子视图,或者您的父级被错误定义
并且不使用来自api 8的“fill_parent”折旧 - btw os'es with api's&lt; 8几乎已经死了:)
LinearLayout.LayoutParams.FILL_PARENT;
public static class LayoutParams {
/**
* Special value for the height or width requested by a View.
* FILL_PARENT means that the view wants to be as big as its parent,
* minus the parent's padding, if any. This value is deprecated
* starting in API Level 8 and replaced by {@link #MATCH_PARENT}.
*/
@SuppressWarnings({"UnusedDeclaration"})
@Deprecated
public static final int FILL_PARENT = -1;
...
}
它无助于更改XML布局中的任何内容。我找到了这个解决方案。在oncreateview中,我获取layoutparams并在searchview中的onQueryTextSubmit事件中分配它。 oldLayoutParams = svSearchSentItems.getLayoutParams();
复制粘贴不需要理解 - 我希望有更多像您这样的开发人员:)
看到这是你想要做的事情:
public class TestActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
final View btnClear = findViewById(R.id.btnSentSearchClear);
SearchView sv = (SearchView) findViewById(R.id.svMailSent);
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
btnClear.setVisibility(newText!=null
&& !newText.isEmpty() ? View.VISIBLE : View.GONE);
return false;
}
});
}
GITHUB上的完整工作安卓工作室示例
答案 2 :(得分:-1)
它无助于更改XML布局中的任何内容。我找到了这个解决方案。在oncreateview中,我获取了layoutparams并将其分配给searchview中的onQueryTextSubmit事件。
oldLayoutParams = svSearchSentItems.getLayoutParams();
svSearchSentItem.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
btnClear.setVisibility(View.VISIBLE);
preLast = 0;
isQuickSearch = true;
currentMailInboxListMap = new ArrayList<Map<String, String>>();
setSentItemListView(query, 0, 50, true,false);
((DashboardActivity)getActivity()).mailSentSearchQuery=query;
searchCycle = 1;
svSearchSentItem.clearFocus();
svSearchSentItem.setLayoutParams(oldLayoutParams);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (newText.isEmpty()) {
}
else
{
btnClear.setVisibility(View.VISIBLE);
}
return false;
}
});