Android-使用查询提示使整个搜索视图可点击

时间:2019-03-17 18:01:52

标签: java android searchview

因此,我一直在Android Studio中开发此库存管理系统。在“产品获取”片段中,我有一个搜索视图,并且我希望使整个搜索视图都可单击。部分问题已在此处解决:Android - Make whole search bar clickable。但我希望搜索视图具有可见的查询提示。所以基本上我希望它成为带有搜索图标和文本的按钮。我想要它是因为它应该打开一个对话框,用户可以在其中实际搜索产品。不是从此搜索视图开始。

当我添加setIconified(true)时,整个主体都是可单击的,但查询提示不可见。像这样:

enter image description here

当我添加setIconified(false)时,查询提示可见,但仅可单击搜索图标。像这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以在SearchView消耗所有触摸之前拦截所有触摸。我创建了一个简单的类来拦截所有触摸事件。 科特林:

class TouchInterceptorLayout @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {

    // You need override this method.
    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        return true
    }
}

Java:

public class TouchInterceptorLayout extends FrameLayout {
    public TouchInterceptorLayout(Context context) {
        super(context);
    }

    public TouchInterceptorLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TouchInterceptorLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return true;
    }
}

查看xml的外观:

<com.example.testci.temp.TouchInterceptorLayout
            android:id="@+id/interceptorLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        <SearchView
                android:id="@+id/searchView"
                android:queryHint="@string/app_name"
                android:iconifiedByDefault="false"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
</com.example.testci.temp.TouchInterceptorLayout>

现在,您只需将OnClickListener设置为interceptorLayout

使用我的实验的完整代码,您可以找到here