android 中列表视图元素的可点击视图

Clickable view over a listview element in android

我的问题是我有一个 ListView,它是从一个适配器填充的,并且在列表中的每个元素中都有一些按钮和 ontouchevents。我希望列表仅显示为 "active" 屏幕中央的元素,为此我在不在屏幕中间的列表元素上显示了一个 relativeLayout。这已经可以正常工作了。

问题来了,因为我放在项目前面的视图有点透明,它后面的按钮(在列表视图项目内)仍然可以点击。我希望顶部的 relativeview 消耗 onclick 和 ontouch 事件,但我阅读的所有内容都不起作用,我会感谢你的帮助! :)

我试过

listViewElement.setEnabled(false);
listViewElement.setClickable(false);

并与

relativeLayoutOverElement.bringToFront();
relativeLayoutOverElement.setClickable(true);
relativeLayoutOverElement.setEnabled(true);
relativeLayoutOverElement.setFocusable(true);
relativeLayoutOverElement.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                return true;
           }
        });
relativeLayoutOverElement.setOnClickListener(null);

但是没用。

这是列表视图中每个元素的xml代码的格式:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:arc="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="2dp"
    android:paddingTop="2dp" >

    <com.capricorn.ArcMenu
        android:id="@+id/arc_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:visibility="gone"
        arc:childSize="@dimen/menuChildSize"
        arc:fromDegrees="@dimen/menuFromDegrees"
        arc:toDegrees="@dimen/menuToDegrees" />

    <ImageView
        android:id="@+id/imageplay"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:src="@drawable/play"
        android:visibility="gone" />

    <RelativeLayout
        android:id="@+id/transparency"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/black"
        android:visibility="gone" >
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/container2"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/event_name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:padding="6dp"
            android:textColor="@color/green"
            android:textSize="15sp"
            android:visibility="gone" />

        <RelativeLayout
            android:id="@+id/imgvidcontainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <RelativeLayout
                android:id="@+id/videocontainer"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:visibility="gone" >

                <VideoView
                    android:id="@+id/video"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true" />
            </RelativeLayout>

            <ImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="fitXY" />

        </RelativeLayout>

        <LinearLayout
            android:id="@+id/footer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:orientation="vertical"
            android:paddingBottom="6dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="6dp" >

            <LinearLayout
                android:id="@+id/footer_location_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/transparent"
                android:orientation="horizontal" >

                <ImageView
                    android:id="@+id/location_icon"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:src="@drawable/icon_location_green" />

                <TextView
                    android:id="@+id/location"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="6dp"
                    android:background="@android:color/transparent"
                    android:textColor="@color/green" />

            </LinearLayout>

            <RelativeLayout
                android:id="@+id/footer_caption_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <ImageView
                    android:id="@+id/seemorecaption"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_alignParentEnd="true"
                    android:layout_alignParentRight="true"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:src="@drawable/seemorecaption"
                    android:visibility="gone" />

                <TextView
                    android:id="@+id/_caption"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/green" />
            </RelativeLayout>

            <LinearLayout
                android:id="@+id/footer__info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/transparent"
                android:orientation="horizontal" >

                <ImageView
                    android:id="@+id/comments"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:paddingTop="7dp"
                    android:src="@drawable/comments" />

                <TextView
                    android:id="@+id/numcomments"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="6dp"
                    android:layout_marginRight="20dp"
                    android:background="@android:color/transparent"
                    android:gravity="center_vertical"
                    android:textColor="@color/green" />

                <ImageView
                    android:id="@+id/like"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:paddingBottom="7dp"
                    android:src="@drawable/like" />

                <TextView
                    android:id="@+id/numlikes"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="6dp"
                    android:layout_marginRight="20dp"
                    android:background="@android:color/transparent"
                    android:gravity="center_vertical"
                    android:textColor="@color/green" />

                <ImageView
                    android:id="@+id/dislike"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:paddingTop="7dp"
                    android:src="@drawable/unlike" />

                <TextView
                    android:id="@+id/numdislikes"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="6dp"
                    android:layout_marginRight="20dp"
                    android:background="@android:color/transparent"
                    android:gravity="center_vertical"
                    android:textColor="@color/green" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/morepoints"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:paddingBottom="6dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="6dp"
        android:textColor="@color/green"
        android:textSize="25dp" />

</RelativeLayout>

这是包含列表视图的片段的 xml 代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:staggered="http://schemas.android.com/apk/res-auto"
    android:id="@+id/listLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    android:orientation="vertical" >

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true">

        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:numColumns="1"
            android:paddingTop="50dp" />
    </android.support.v4.widget.SwipeRefreshLayout>

    <LinearLayout
        android:id="@+id/upperBar"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:background="@android:color/transparent"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/title"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="0.85"
            android:background="@drawable/greenborder"
            android:gravity="center_vertical|center_horizontal"
            android:textColor="@color/green"
            android:textSize="20dp" />

        <TextView
            android:id="@+id/blackSquare"
            android:layout_width="50dp"
            android:layout_height="fill_parent"
            android:background="@android:color/black"
            android:visibility="gone" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/profilePictureLayout"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="@layout/rounded_shape"
        android:visibility="gone" >

        <ImageView
            android:id="@+id/profile_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@layout/rounded_shape"
            android:padding="4dp" />
    </RelativeLayout>

</RelativeLayout>

我试图通过片段中的滚动禁用列表视图中不在屏幕中心的元素。我设法放置了 "transparency" 叠加层,但元素内的所有内容仍然可点击

要使用点击,只需在视图上定义一个 OnClickListener,什么都不做。

relativeLayoutOverElement.setOnClickListener(setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                          //do nothing
           }
        });

因此,点击视图会触发透明覆盖的点击监听器,它不会做任何事情,但会消耗点击,使底层元素不会被点击。

另一种方法是在顶部显示透明叠加层,并通过在要停止单击的基础视图上使用 setClickable(false) 使基础视图不可点击。您尝试的是使整个列表元素不可点击,但这并没有真正删除该列表元素中子视图的 onclick 侦听器。因此,您必须明确禁用其上定义了点击侦听器的子视图的点击。