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 侦听器。因此,您必须明确禁用其上定义了点击侦听器的子视图的点击。
我的问题是我有一个 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 侦听器。因此,您必须明确禁用其上定义了点击侦听器的子视图的点击。