Android需求:点击父布局区域,2个子view有press状态,且ACTION_UP时要有select状态

需求

点击父布局区域,2个子view有press状态,且ACTION_UP时要有select状态
在这里插入图片描述
大概就是上面这个图的状态

解决

xml布局

 <RelativeLayout
            android:id="@+id/rl_device"
            android:focusableInTouchMode="true"
            style="@style/tab_item_layout">

            <ImageButton
                android:id="@+id/ib_device"
                style="@style/btn_tab"
                android:clickable="false"
                android:focusable="false"
                android:src="@drawable/selector_tab_device" />

            <View
                android:id="@+id/line_device"
                style="@style/tab_line"
                android:clickable="false"
                android:focusable="false" />
        </RelativeLayout>

重点代码是在父布局加入

android:focusableInTouchMode="true"

子view加入

android:clickable="false
android:focusable="false"

代码修改

这样布局会带来一个问题,在监听RelativeLayout的点击事件时,第一次点击不会有onClick的回调,有兴趣的同学可以去看下onTouchEvent的源码,如果ACTION_UP是在focusableInTouchMode,并且没获得焦点,会去获得焦点;当下一次ACTION_UP时,才会调用 performClick()。
所以我们需要以下修改

rlDevice.setOnTouchListener(new onTouchListenerImpl());

    class onTouchListenerImpl implements OnTouchListener {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_UP && !v.isFocused()) {
                v.performClick();
            }
            return false;
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值