Android - Сделайте весь вид поиска кликабельным с подсказкой запроса - PullRequest
1 голос
/ 17 марта 2019

Итак, я работал над этой системой управления запасами в Android Studio. Во фрагменте «Взятие товара» у меня есть вид поиска, и я хочу, чтобы этот вид поиска был кликабельным по всему телу. Часть этой проблемы решена здесь: Android - Сделайте всю панель поиска кликабельной . Но я хочу, чтобы в окне поиска была видимая подсказка запроса. В общем, я хочу, чтобы это была кнопка со значком поиска и текстом. Я хочу этого, потому что предполагается открыть диалоговое окно, в котором пользователь фактически собирается искать товары. Не из этого поиска.

Когда я добавляю setIconified (true), все тело кликабельно, но подсказка запроса не видна. Как это:

enter image description here

Когда я добавляю подсказку запроса setIconified (false), она видна, но кликабелен только значок поиска. Как это:

enter image description here

1 Ответ

1 голос
/ 17 марта 2019

Вы можете перехватить все касания, прежде чем 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.

Полный код с моим экспериментом вы можете найти здесь .

...