Android:Slidingdrawer.lock() 阻止其余布局的触摸输入

Posted

技术标签:

【中文标题】Android:Slidingdrawer.lock() 阻止其余布局的触摸输入【英文标题】:Android: Slidingdrawer.lock() blocking touch input for the rest of the layout 【发布时间】:2011-06-22 20:06:12 【问题描述】:

我有一个带有 viewFlipper 和 slipDrawer 的 Activity。 SlidingDrawer 的处理程序包含一个可点击的额外按钮。

问题是,处理程序上的额外按钮仅在slidingDrawer被锁定时注册onClick,当slidingDrawer被锁定时,viewFlipper(布局的其余部分)不再响应gestureListener,因此我无法翻转视图之间。

有没有人对如何在slidingDrawer 的处理程序上制作一个额外的按钮可点击,同时在viewFlipper 上有一个工作的手势监听器有任何建议?

也许有人知道为什么slidingDrawer.lock() 会阻止布局其余部分的触摸输入?

谢谢!

【问题讨论】:

【参考方案1】:

这是一个已知问题 看到这个解决方案 http://code.google.com/p/android/issues/detail?id=17844

【讨论】:

这是一个普遍的想法,我们不提交只是链接的答案。【参考方案2】:

这个解决方案对我有用:扩展 SlidingDrawer 并覆盖 onTouchEvent 方法(如果 slipdrawer 被锁定,应该返回 false 而不是 true):

package xxx.slidingdrawer;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;

@SuppressWarnings("deprecation")
public class SlidingDrawer extends android.widget.SlidingDrawer 

    private boolean mLocked;

    public SlidingDrawer(Context context, AttributeSet attrs) 
        super(context, attrs);
    

    @Override
    public void lock() 
        super.lock();
        mLocked = true;
    

    @Override
    public boolean onTouchEvent(MotionEvent event) 
        if (mLocked) 
            return false;
         else 
            return super.onTouchEvent(event);
        
    

【讨论】:

【参考方案3】:

我找到了导致这种情况的sliderDrawer 的哪一部分。如果slidingDrawer 被锁定,onInterceptTouchEvent() 方法返回false。

无论如何,我通过创建一个上下滑动的新 Activity 来伪造一个slidingDrawer,从而“解决”了这个问题:

startActivity(yourIntent);
    overridePendingTransition(R.anim.yourNextActivity_InAnimation, R.anim.yourCurrentActivity_OutAnimation);

当然缺点是不能再用手指拖动抽屉了。

【讨论】:

以上是关于Android:Slidingdrawer.lock() 阻止其余布局的触摸输入的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录