即使设置可见性android也无法看到按钮

时间:2016-06-15 03:53:08

标签: android

我旁边有一个搜索查看和按钮。按钮显示为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>

3 个答案:

答案 0 :(得分:0)

你可以使用ajax和android来检查searchview是否为空,如果它不是空的,那么make view.visible else view.gone。

http://programmerguru.com/android-tutorial/android-ajax-auto-load

这可能会有所帮助!

答案 1 :(得分:-1)

抱歉,但你不能以这种方式一起使用这3个属性:)

    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的所有视图中按比例分配。

我建议您删除所有属性并首先设置:

  • id
  • width
  • 高度

如果它你会看到你想要的东西那么你可以通过这种方式添加一些额外的属性,你会看到它失败:)

使用此并报告结果:

<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,我按照你的建议更改了布局。但我仍然看不到按钮。它似乎正在屏幕外的右上角 - 创意专业

您正在严重嵌入子视图,或者您的父级被错误定义

enter image description here

并且不使用来自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();

YEAH BUDDY你摇滚!!!

复制粘贴不需要理解 - 我希望有更多像您这样的开发人员:)

看到这是你想要做的事情:

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上的完整工作安卓工作室示例

https://github.com/c3ph3us/exampleHideButtonForSearchView/

答案 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;
    }
});