Android - 按钮上的翻转文本

时间:2014-07-31 10:28:45

标签: android

我创建了关于按钮背景及其文本的翻转效果。我已经能够为背景创建翻转效果,这样当按钮处于按下或聚焦状态时,背景将从黑色变为黄色。以下是我这样做的方式:

在我的片段中:

btnLogin.setBackgroundResource(R.drawable.btn_login);

这里是后台资源,即btn_login.xml:

    <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

     <item android:state_pressed="true"
           android:drawable="@drawable/btn_loginrollover" /> <!-- pressed -->

     <item android:state_focused="true"
           android:drawable="@drawable/btn_loginrollover" /> <!-- focused -->

     <item android:drawable="@drawable/btn_logindefault" /> <!-- default -->

 </selector>

btn_logindeault.xml:

<?xml version="1.0" encoding="utf-8"?>
<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle" 
       android:padding="10dp">

       <solid android:color="#000000"/>

       <corners
         android:bottomRightRadius="4dp"
         android:bottomLeftRadius="4dp"
         android:topLeftRadius="4dp"
         android:topRightRadius="4dp"/>

       <gradient
         android:startColor="#000000"
         android:centerColor="#000000"
         android:endColor="#FFFFFF"
         android:angle="90"/>      
</shape>

btn_loginrollover.xml:

    <?xml version="1.0" encoding="utf-8"?>
<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle" 
       android:padding="10dp">

       <solid android:color="#FFCC00"/>

       <corners
         android:bottomRightRadius="3dp"
         android:bottomLeftRadius="3dp"
         android:topLeftRadius="3dp"
         android:topRightRadius="3dp"/>
</shape>

我想对按钮文本做同样的事情,这样当按钮处于按下或聚焦状态时,文本会从黑色变为黄色。

按钮的时间,但与文本有关。下面是我使用setOnFocusChangeListener执行此操作的失败:

    btnLogin.setOnFocusChangeListener(new OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            btnLogin.setTextColor(Color.BLACK);
        } else {
            btnLogin.setTextColor(Color.parseColor("#FFCC00"));
        }
    }
});

我也尝试使用按钮的setOnTouchListener来监控事件并相应地更改文本颜色,但这也不成功:

    btnLogin.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
            if (hasFocus) {
                btnLogin.setTextColor(Color.BLACK);
            } else {
                btnLogin.setTextColor(Color.parseColor("#FFCC00"));
            }
    }
});

关于如何解决我的问题的任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

嘿,试试这个代码,我已经测试并且工作正常,当我按下按钮时,它的颜色变为黄色,当你将它的颜色释放回黑色时:)

btnLogin.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                btnLogin.setTextColor(Color.parseColor("#FFCC00"));
                break;
            case MotionEvent.ACTION_UP:
                btnLogin.setTextColor(Color.BLACK);
                break;
            }
            return true;
        }
    });