使用单个TextView创建可单击循环?

时间:2017-05-10 19:54:38

标签: java android

本周我才刚刚开始学习XML和Java代码,感谢Udacity的课程......我几乎已经过了一半,但我觉得自己制作了自己的无用应用程序..

所以我在红色背景上有一些黑色文字。

当我单击文本时,我告诉Java将文本更改为白色,将背景更改为蓝色,确实如此。

当我再次点击文字时,我想让它回到黑色和红色,但事实并非如此。

我知道为什么会这样,但我不知道如何解决这个问题。 之所以会发生这种情况,是因为我的文字有onClick来更改颜色并显示到屏幕。很自然地,每次点击都会调用相同的onClick

每次点击时,我该如何让它在两个颜色阶段之间不断交替?

我的XML是:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#c04"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textDisplay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:layout_weight="1"
        android:background="#c04"
        android:fontFamily="sans-serif-smallcaps"
        android:gravity="center"
        android:onClick="Hey"
        android:padding="30dp"
        android:text="Hey!"
        android:textAllCaps="true"
        android:textColor="#000"
        android:textSize="150sp"
        android:textStyle="bold" />

</LinearLayout>

Java代码是

public void displaying(String message) {
    TextView whatever = (TextView) findViewById(R.id.textDisplay);
    whatever.setText(message);
    whatever.setTextColor(Color.rgb(255, 255, 255));
    whatever.setBackgroundColor(Color.rgb(82, 218, 199));
}

public void Hey(View v) {
    displaying("Ho!");
}

我做了一些挖掘,发现我可以使用“onClickListener”?但无论我做什么,我都无法让它发挥作用。也许我无法正确理解语法。 还有另一种方法......可能更简单吗?这似乎是我头脑中相当容易的任务,但这个真的让我难过。

2 个答案:

答案 0 :(得分:0)

执行以下操作:

public void Hey(View v) {
    TextView whatever = (TextView) findViewById(R.id.textDisplay);
    if(whatever.getText().toString().equals("Hey!")){
         whatever.setText("Ho!");
         whatever.setTextColor(Color.rgb(255, 255, 255));
         whatever.setBackgroundColor(Color.rgb(82, 218, 199));
    } else if (whatever.getText().toString().equals("Ho!"){
         whatever.setText("Hey!");
         whatever.setTextColor(Color.rgb(0, 0, 0));
         whatever.setBackgroundColor(Color.rgb(/*red RGB*/));
    }
}

您根据TextView的文本决定使用的文本和背景颜色。

答案 1 :(得分:0)

您可以将显示的状态保持为布尔值。类似的东西(未经测试):

boolean stateOfMyTextView = true;

public void displaying(String message) {
    TextView whatever = (TextView) findViewById(R.id.textDisplay);
    whatever.setText(message);
    if (stateOfMyTextView == true) {
        // First color
        whatever.setTextColor(Color.rgb(255, 255, 255));
        whatever.setBackgroundColor(Color.rgb(82, 218, 199));
    }
    else {
        // Other color
        whatever.setTextColor(Color.rgb(0, 0, 0));
        whatever.setBackgroundColor(Color.rgb(255, 0, 0)); 
    }
    // change state of the boolean
    stateOfMyTextView = !stateOfMyTextView;
}