android:onClickListener for relativelayout

时间:2013-12-26 17:00:48

标签: android relativelayout onclicklistener

我有一个relativelayout并编码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...");
        }
    }); 

问题:

relativelayout可以在ACTION_DOWN上显示突出显示,并在ACTION_UP后返回透明状态。然而,点击它,吐司似乎没有显示为编码。

怎么可以修改?谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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)

答案 2 :(得分:0)

您需要return false方法onTouch告诉 OnTouchListener 该消息未被消费。之后,它会将点击事件转发到 OnClickListener onClick方法。