如何同时实现button.setOnClickListener和button.setOnTouchListener

时间:2011-12-15 11:14:12

标签: android

我正在开发android。

我正在创建一个登录按钮。我希望每当我按下登录按钮时,应该更改该按钮的文本颜色。

按下此按钮后,应执行登录功能。

为此我编码如下: -

button_login.setOnTouchListener(new View.OnTouchListener() {
  @Override
  public boolean onTouch(View arg0, MotionEvent arg1) {

    // TODO Auto-generated method stub
    int action = arg1.getAction();
    if(action == MotionEvent.ACTION_DOWN) {                          
          button_login.setTextColor(Color.parseColor("#163D74"));
          return true;
    } else if (action == MotionEvent.ACTION_UP) {
          button_login.setTextColor(Color.parseColor("#FFFFFF"));
                  return true;
    }
         return false;

    }
 });        
button_login.setOnClickListener(new Button.OnClickListener() {

    @Override

        public void onClick(View v)
            {
    // checking the functionality of login

             }
           });

但只有onTouchListener正在运行。登录功能无效。

请告诉我我做了什么错误。以及如何实现这两个功能。意味着我如何更改按钮文本的颜色以及如何执行登录功能。

提前谢谢。

3 个答案:

答案 0 :(得分:3)

您应该在操作已启动时声明您的登录功能。

button_login.setOnTouchListener(new View.OnTouchListener() {

        @Override

        public boolean onTouch(View arg0, MotionEvent arg1) {

            // TODO Auto-generated method stub

            int action = arg1.getAction();

            if(action == MotionEvent.ACTION_DOWN) {

                  button_login.setTextColor(Color.parseColor("#163D74"));

                return true;

            } else if (action == MotionEvent.ACTION_UP) {

                   // check logine functionality.
                  button_login.setTextColor(Color.parseColor("#FFFFFF"));

                return true;


            }

            return false;

        }

    });

它使用相同的逻辑做同样的事情。

答案 1 :(得分:1)

onTouch方法中,您使用return true;表示

  

如果监听器已经使用了该事件,则为true,否则为false。

所以如果你需要其他听众使用它,你需要return false

答案 2 :(得分:1)

我认为您要做的是在按下时更改按钮的UI状态。为此,您不必在触摸时实现...只需编写一个xml并将其放在按钮的src标记上。

一个。在colors.xml上创建一个新标签。你可以添加颜色作为drawables ....你将在第二步中使用它。

在colors.xml中写下这样的东西

<drawable name="red">#0000ff</drawable>

B中。在drawables文件夹中创建一个新的xml,按名称命名

在xml中写这个,在这里你可以用drawable替换drawables,你可以在步骤A的帮助下创建。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/android_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/android_focused"
          android:state_focused="true" />
    <item android:drawable="@drawable/android_normal" />
</selector>

此代码是从here复制的。请参阅Custom Button部分。

℃。将您在步骤B中创建的XML添加为按钮的src属性值,您已经替换了我理解您的onTouch正在做的...