Отключение прокрутки GridView и включение режима прокрутки в Android - PullRequest
0 голосов
/ 14 июля 2020

Я хочу разместить макет сиденья в моем Android Activity Я хочу, чтобы макет моего сиденья был полностью видимым, который находится внутри представления сетки, а вместо прокрутки представления сетки Я хочу, чтобы мое представление прокрутки прокручивалось после отключения сетки просмотр прокрутки также просмотр прокрутки не работает, может ли кто-нибудь помочь мне с этим?

 <ScrollView
        android:layout_below="@+id/top"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        android:layout_above="@+id/rl"
        >
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="match_parent">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"

                >


                <ImageView
                    android:id="@+id/wheel"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_alignParentRight="true"
                    android:layout_gravity="right"
                    android:layout_marginTop="20dp"
                    android:layout_marginEnd="100dp"
                    android:src="@drawable/mywheel" />

                <GridView
                    android:id="@+id/grid"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/wheel"
                    android:layout_marginStart="90dp"
                    android:layout_marginTop="10dp"
                    android:layout_marginEnd="90dp"
                    android:numColumns="5" />

И приведенный ниже код предназначен для отключения прокрутки в моем представлении сетки

gridView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return event.getAction() == MotionEvent.ACTION_MOVE;
            }

        });

1 Ответ

0 голосов
/ 14 июля 2020

к сожалению, это невозможно с использованием "classi c" View s, например ScrollView и GridView - в некоторые дни go Android вообще не был подготовлен для вложенной прокрутки ... вы можете попробуйте перенести GridView на какой-нибудь пользовательский NestedGridView теоретически, но я бы посоветовал преобразовать GridView в RecyclerView с GridLayoutManager - текущая версия RecyclerView поддерживает wrap_content для высоты и намного более гибкая, вы легко запретите прокрутку для этого View, сохраняя весь ScrollView контейнер с возможностью прокрутки

ниже фрагмент не работает, потому что вы возвращаете true при возникновении ACTION_MOVE. это значение true означает «да, я уже обработал этот ход, не отправляйте его дальше» - GridView тогда ничего не делает, но возвращает true, поэтому ACTION_MOVE никогда не будет отправлен и получен / обработан ScrollView

@Override
public boolean onTouch(View v, MotionEvent event) {
    return event.getAction() == MotionEvent.ACTION_MOVE;
}

редактировать: есть также возможность для отправки касания (методы onInterceptTouchEvent, dispatchTouchEvent и аналогичные) - это будет сложно и сложно передать касание в вашем случае (один свиток внутри второго свитка) , но, возможно, стоит попробовать, если у вас очень сложный адаптер для GridView

, отредактируйте комментарий:

замените объявление GridView XML на это:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/wheel"
    android:layout_marginStart="90dp"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="90dp" />

android:numColumns="5" строка удалена, это будет объявлено GridLayoutManager в коде

int numColumns = 5;
recyclerView.setLayoutManager(new GridLayoutManager(this, numColumns));

вам нужно отредактировать ваш адаптер, теперь он должен extends RecyclerView.Adapter<GridAdapter.GridViewHolder>. подробнее об этом адаптере ЗДЕСЬ

...