android点击linearlayout没反应,关于android:onClick不会在子级的LinearLayout上触发

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

有人可以帮忙吗?

ar_item.xml

android:id="@+id/ar_item" android:layout_width="202dp"

android:layout_height="62dp" android:background="@drawable/bg_item_ar"

android:clickable="true">

android:layout_width="164dp" android:layout_height="fill_parent"

android:paddingBottom="8dp" android:paddingLeft="8dp"

android:paddingTop="8dp" android:paddingRight="6dp" android:gravity="center"

android:background="#50000000" />

我的自定义LinearLayout

public class ARView extends LinearLayout

{

public ARView(final Context context, String name, String id)

{

super(context);

getLayoutInflater().inflate(R.layout.ar_item, this ,true);

LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.ar_item, null);

TextView textView = (TextView) findViewById(R.id.ar_item_txt);

textView.setText(name);

setOnClickListener(new View.OnClickListener()

{

public void onClick(View v)

{

Toast t = Toast.makeText(context,"hey!", Toast.LENGTH_SHORT);

t.show();

}

});

}

}

我有完全一样的问题,您找到解决方案了吗?

android:duplicateParentState="true"没有帮助我。

要使布局及其子项可点击,您需要为每个子项添加此选项:

android:clickable="false"

然后,点击处理将转到父项。

谢谢@Yurets,它的工作就像魔术一样。这必须是可以接受的答案

谢谢。也为我工作!

是的-工作。我的问题是我的孩子们是按钮(本质上可以点击),所以我不得不将它们更改为ImageViews。我不知道为什么首先要把它们作为按钮。

为每个孩子

android:duplicateParentState="true"

感谢这样做,解决了我类似的问题,即我有多个控件要表达"被单击"的视觉状态,而只需要在父级中处理事件。

虽然我仍然看到一个非常奇怪的问题-当我具有clickable = true,width / height = wrap / match时,它可以工作,但是如果我将它们放入一种样式并使用该样式,则不会(没有视觉点击状态,没有处理程序被解雇)。这是2.3;知道为什么会这样吗?

谢谢你!解决了我今天使用嵌套线性布局选择时遇到的一个问题。

@Blackbelt在这种情况下,我应该把这个android:duplicateParentState =" true"放在这里?线性布局或文本视图中。

LLs子项上的@jaydroider,所以我想是TextView

门槛需要设置每个孩子android:clickable =" false"

这并不总是有效的...。请参阅此... stackoverflow.com/a/31578111/5886712 ...或在此之下应用于子代> android:clickable =" false"

这不是您的情况,但是可点击的ViewGroup出现了类似的问题。在寻找一个解决方案一个小时后,发现我在ViewGroup内将android:inputType设置为TextView,这阻止了onClick()侦听器(不知道为什么)

Don't use android:inputType with TextView

谢谢!我不知道为什么我的TextView会拦截点击。

这也是我的问题,请确保您没有inputType或将其设置为none!感谢您发布

使您的父级LinearLayout的android:clickable =" true"

使所有childview的android:clickable =" false"

在Linearlayout下-从TextView中删除android:inputType ="

android:duplicateParentState="true"使我的TextView看起来像已被禁用,并且无法接收单击事件。

您只需要设置TextView clickable="false"。因此,click事件将调度到父布局,并且TextView仍然可以对touch事件做出反应(具有波纹效果)。

您没有使用自定义视图;您正在使用标准的LinearLayout。您的XML标签应为:

...

@jul您尝试过这个吗?

TextView的高度覆盖整个父级(整个布局),因此您可以单击空白区域,但不能单击布局。尝试为您的TextView使用wrap_content用于android:layout_height。还要为布局设置点击监听器。

TextView的宽度小于其父级的宽度,因此应该在Linearlayout的右侧保留一个可单击的区域。

如果所讨论的视图是TextView,则可能需要将它们设置为focusable="false",这样就不会使用第一次单击来关注文本视图。

要确保的一件事是,另一个视图不在您尝试单击的视图之上。这在FrameLayouts(可能覆盖了您的子LinearLayout)中或在相对布局中尤其常见,您可能忘记更新此行:

android:layout_below="@id/shouldBeTheIdOfTheViewCurrentlyBeingCovered"

这样视图就不会占据相同的空间。

为LinearLayout创建变量

LinearLayout layout;

layout.setOnClicknersetOnClickListener(new View.OnClickListener()

{

public void onClick(View v)

{

Toast t = Toast.makeText(context,"hey!", Toast.LENGTH_SHORT);

t.show();

}

});

我遇到了同样的问题,并且所有XML属性均不起作用。我认为发生这种情况是因为我以编程方式使视图膨胀并添加了视图。对我来说,解决方法是-也是通过编程-将膨胀后的根视图设置为不可点击:

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

view.setClickable(false);

(是的,我尝试使some_layout在XML中不可点击。)

上面的解决方案都不适合我。后来我发现LinearLayout中的LinkMovementMethod设置为TextView。此类拦截触摸事件,单击事件和TextView的属性,例如clickable,focusable vs.。

我遇到了同样的问题,并且所有的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

子视图未处理的所有Click事件都将自动传递到LinearLayout。

...

android:focusable="true"

android:clickable="true">

问题可能出在布局中具有android:layout_height="fill_parent"的文本视图中。如果那不能解决问题,则问题可能出在onClick()事件上。由于线性布局是布局,因此实际上可能从未调用过onClick()。尝试改写onTouch()事件侦听器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值