微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android在View上的点击监听器以奇怪的方式工作

如何解决Android在View上的点击监听器以奇怪的方式工作

我有以下layout.xml,其中包含一个ScrollView和一些元素(图片文字

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/clickable"
            android:orientation="vertical">
        <LinearLayout
            android:id="@+id/layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true">

            <ImageView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_weight="1"
                android:layout_gravity="center"
                android:src="@drawable/crown" />

            <TextView
                android:id="@+id/n1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="10dp"
                android:text="some text" />

        </LinearLayout>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true">

                <ImageView
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_weight="1"
                    android:layout_gravity="center"
                    android:src="@drawable/medal" />

                <TextView
                    android:id="@+id/n2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:padding="10dp"
                    android:text="some text" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true">

                <ImageView
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_weight="1"
                    android:layout_gravity="center"
                    android:src="@drawable/star" />

                <TextView
                    android:id="@+id/n3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:padding="10dp"
                    android:text="some text" />
            </LinearLayout>
        </LinearLayout>
</ScrollView>
</RelativeLayout>

MainActivity.java

public class MainActivity extends Activity{

LayoutInflater inflater;
RelativeLayout MyLayout;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        inflater = LayoutInflater.from(this);
        MyLayout = (RelativeLayout) inflater.inflate(R.id.layout,null,false);
        MyLayout.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("TAG"," I'm clicked! ");
            }
        });

当我单击屏幕时,上面的单击侦听器不起作用!!!! 但是,如果我将代码更改为此-一切正常

MyLayout.findViewById(R.id.clickable).setonClickListener(new View.OnClickListener() {
     @Override
            public void onClick(View view) {
                Log.d("TAG"," I'm clicked! ");
            }
    });

那为什么要在父级RelativeLayout内的ScrollView中将单击侦听器设置为LinearLayout? 为什么单击侦听器不适用于根xml元素RelativeLayout ??

解决方法

问题在于您的ScrollView正在拦截触摸事件,而没有将其传播到父级布局(在本例中为您的RelativeLayout)。

This线程可能具有有关此主题的一些有用信息。

,

只需在您的 android:clickable="false"中添加ScrollView。然后如下更改您的MainActivity:

public class MainActivity extends Activity {

LinearLayout myLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myLayout = (LinearLayout) findViewById(R.id.layout);
    myLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("TAG"," I'm clicked! ");
        }
    });
}

}

注意: activity_main.xml是您正在加载的xml文件。

现在您的OnClick将按预期工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。