Android:相对布局的onClickListener

4

我有一个相对布局,并编写了onTouchListener以以下方式突出显示背景:

    relative3.setOnTouchListener(new OnTouchListener() 
    {
        @Override
        public boolean onTouch(View arg0, MotionEvent event) 
        {
            if(event.getAction()==MotionEvent.ACTION_DOWN )
            {
                relative3.setBackgroundColor(getResources().getColor(R.color.tran_grey));
            }

            if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL))
            {
                relative3.setBackgroundColor(getResources().getColor(android.R.color.transparent));
            }
            return true;
        }           
    }); 

并在onClick时执行一个操作。

    relative3.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            custom_toast("Redirecting...");
        }
    }); 

问题:

相对布局可以在 ACTION_DOWN 时显示高亮,而在 ACTION_UP 时变回透明。但是当被点击时,toast并没有按照代码中的要求出现。

该怎么修改呢?谢谢!

3个回答

2

确保布局具有属性android:clickable="true"

正确的方法是使用带有按下和正常状态的背景可绘制XML进行颜色更改。如果您在代码中执行此操作,请使用getActionMasked()而不是getAction()


是的,我已经尝试使用XML作为RelativeLayout的背景。在RelativeLayout中有ImageButton和一些TextViews。除了ImageButton之外的其他区域按下将成功触发更改背景颜色,但我不明白为什么在ImageButton上按下时,背景颜色不会改变...因此我尝试以以上方式执行... - pearmak
我最终使用XML作为背景完成了这个任务。谢谢! - pearmak

0

返回 false 以防止您的 OnTouchListener 消费事件,这样 clicklistener 就能正常工作。

relative3.setOnTouchListener(new OnTouchListener() 
{
    @Override
    public boolean onTouch(View arg0, MotionEvent event) 
    {
        if(event.getAction()==MotionEvent.ACTION_DOWN )
        {
            relative3.setBackgroundColor(getResources().getColor(R.color.tran_grey));
        }

        if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL))
        {
            relative3.setBackgroundColor(getResources().getColor(android.R.color.transparent));
        }
        // change to false.
        return false;
    }           
}); 

更多信息:http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View, android.view.MotionEvent)

如果问题是RelativeLayout在按下时变成了tran_black颜色,但在Action_up时无法恢复透明,那么问题就出在这里:http://stackoverflow.com/questions/20787733/android-setting-colors-for-relativelayout-inside-ontouchlistener - pearmak

0

onTouch 方法中,您需要 return false,以告诉 OnTouchListener 点击事件未被消耗。然后,它将点击事件转发到 OnClickListeneronClick 方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接