Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在带有子对象的LinearLayout上未触发onClick_Android_Onclick_Android Linearlayout - Fatal编程技术网

Android 在带有子对象的LinearLayout上未触发onClick

Android 在带有子对象的LinearLayout上未触发onClick,android,onclick,android-linearlayout,Android,Onclick,Android Linearlayout,我有一个自定义的LinearLayout,有一个更小的TextView孩子。我希望能够单击TextView未覆盖的区域,因此我将clickable=true和onclicklistener设置为LinearLayout,但不会触发onClick。如果我在TextView上设置onclick侦听器,它将按预期工作 有人能帮忙吗 ar_item.xml 您的文本视图高度覆盖整个父级(整个布局),因此您可以单击空白区域,但不能单击布局。尝试为您的TextView使用android:layout\u高度

我有一个自定义的LinearLayout,有一个更小的TextView孩子。我希望能够单击TextView未覆盖的区域,因此我将clickable=true和onclicklistener设置为LinearLayout,但不会触发onClick。如果我在TextView上设置onclick侦听器,它将按预期工作

有人能帮忙吗

ar_item.xml


您的文本视图高度覆盖整个父级(整个布局),因此您可以单击空白区域,但不能单击布局。尝试为您的TextView使用android:layout\u高度的包装内容。设置布局的单击侦听器。

您没有使用自定义视图;您使用的是标准的线性布局。您的XML标记应该是:

<com.yourcode.ARView ...> ... </com.yourcode.ARView>
。。。

问题可能来自于在其布局中有
android:layout\u height=“fill\u parent”
的文本视图。如果这不能解决问题,那么问题可能是onClick()事件。线性布局可能永远不会调用onClick(),因为它是一个布局。请尝试重写onTouch()事件侦听器。

对于每个子级

android:duplicateParentState=“true”


需要确保的一点是,另一个视图不在您尝试单击的视图的顶部。这在框架布局中尤其常见(可能会涉及到您的子直线布局),或者在相对布局中,您可能忘记更新此行:

android:layout_below="@id/shouldBeTheIdOfTheViewCurrentlyBeingCovered"

因此,视图不会占用相同的空间。

android:duplicateParentState=“true”
对我没有帮助

要使布局可与其子项一起单击,您需要为每个子项添加此选项:

 android:clickable="false"

然后单击处理将向上转到父级,但这不是您的情况,但我在单击查看组时遇到了类似的问题。在寻找解决方案一个小时后,我发现我在我的
ViewGroup
中将
android:inputType
设置为
TextView
,这阻止了
onClick()
侦听器(不知道为什么)

不要在TextView中使用android:inputType


如果所讨论的视图是
TextView
s,则可能需要将其设置为
focusable=“false”
,以便第一次单击不会聚焦于文本视图。

将以下属性添加到线性布局中 子视图未处理的任何单击事件将自动传递给LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:focusable="true"
    android:clickable="true">

<child/>
<child/>

</LinearLayout>

android:duplicateParentState=“true”使我的文本视图看起来像被禁用了,无法接收单击事件


您只需设置文本视图
clickable=“false”
。因此,单击事件将被分派到父布局,而文本视图仍然可以对触摸事件做出反应(产生连锁反应)。

我遇到了同样的问题,所有的XML属性都不起作用。我不确定是否会发生这种情况,因为我以编程方式膨胀并添加视图,但这就是我解决问题的方法

我有一个扩展LinearLayout的类,它有一个TextView和一个ImageView。 在膨胀布局并获取视图之后,我为子视图指定了一个OnClickListener,当按下该按钮时,执行LineaLayout的onClickListner

public class MyView extends LinearLayout {
private OnClickListener clickListener;
ImageView imageView;
TextView textView;

@Override
public void setOnClickListener(@Nullable OnClickListener l) {
    super.setOnClickListener(l);
    clickListener = l;
}

void afterViews() {
    imageView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            clickListener.onClick(MyView.this);
            return false;
        }
    });
    textView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            clickListener.onClick(MyView.this);
            return false;
        }
    });
}

我也尝试过重写OnTouchListener,但是我的子视图没有产生我所需要的连锁反应。

上述解决方案中没有一个适合我。然后我注意到在我的
LinearLayout
中有一个
LinkMovementMethod
设置为
TextView
。此类截取触摸事件、单击事件和
TextView
的属性,例如可单击、可聚焦vs

让您的家长线性布局成为android:clickable=“true”

使所有儿童视图的android:clickable=“false”


在Linearlayout-Removeandroid:inputType=”“下,我遇到了同样的问题,所有的XML属性都不起作用。我认为这是因为我以编程方式膨胀并添加视图。对我来说,解决办法是——也是通过编程方式——将膨胀的根视图设置为不可单击:

View view = layoutInflater.inflate(R.layout.some_layout, someLinearLayout, false);
view.setClickable(false);

(是的,我试图让
某些布局在XML中不可单击。)

文本视图的宽度比其父视图小,因此在线性布局的右侧应保留一个可单击区域。我遇到了完全相同的问题,您找到解决方案了吗?谢谢,解决了我的类似问题,即有多个控件要表示“单击”的视觉状态,而只需在父控件中处理事件。虽然我仍然看到一个非常奇怪的问题-当我有clickable=true,width/height=wrap/match时,它可以工作,但如果我将它们放入样式并使用该样式,它就不能工作(没有可视的“点击”状态,没有触发处理程序)。这是在2.3上;知道为什么会发生这种情况吗?谢谢!解决了我今天在嵌套线性布局选择中遇到的一个问题。Sill需要设置每个子android:clickable=“false”这并不总是起作用……请参考此……或应用于下面的child>android:clickable=“false”谢谢!我不明白为什么我的TextView会拦截点击。这也是我的问题,请确保您没有inputType或将其设置为none!感谢您发布此帖子。我没有任何效果,除非我找到您的答案,否则我的TextView有输入类型。谢谢@Yurets,这就像魔术一样。这一定是可以接受的WerThank。对我也有用!是的-有用。我的问题是我的孩子是按钮(天生可点击),所以我不得不将他们更改为ImageView。我不知道为什么我首先将他们作为按钮。如果布局中必须有可点击的孩子呢???然后你跳过设置
android:clickable=“false”
用于那些孩子。@ekashking
public class MyView extends LinearLayout {
private OnClickListener clickListener;
ImageView imageView;
TextView textView;

@Override
public void setOnClickListener(@Nullable OnClickListener l) {
    super.setOnClickListener(l);
    clickListener = l;
}

void afterViews() {
    imageView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            clickListener.onClick(MyView.this);
            return false;
        }
    });
    textView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            clickListener.onClick(MyView.this);
            return false;
        }
    });
}
View view = layoutInflater.inflate(R.layout.some_layout, someLinearLayout, false);
view.setClickable(false);