Android setTextOn 在 onCheckChanged 方法中不起作用

Android setTextOn not working in onCheckChanged method

接下来的两个语句产生 正确的 左下方屏幕:

                if(isChecked) sw.setText   ("This switch is: On"); 
                else          sw.setText   ("This switch is: Off"); 

根据我正在查看的文本,接下来的两个语句应该在左侧生成屏幕。但是他们在右下方生成 不正确的 屏幕:

                if(isChecked) sw.setTextOn ("This switch is: On"); 
                else          sw.setTextOff("This switch is: Off"); 

代码:

package com.dslomer64.checkbox;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Switch;


public class MainActivity extends ActionBarActivity{//} implements CompoundButton.OnCheckedChangeListener {
    CheckBox cb;
    Switch sw;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        cb = (CheckBox)findViewById(R.id.check);
        cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                    cb.setText("checked");
                else
                    cb.setText("Unchecked");
            }
        });

        sw = (Switch)findViewById(R.id.swish);
        sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                    sw.setTextOn("This switch is: On"); ////////////
                else
                    sw.setTextOff("This switch is: Off"); //////////

            }
        });
    }
}

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity" android:weightSum="1">

    <Switch
        android:layout_width="453dp"
        android:layout_height="100dp"
        android:id="@+id/swish"
        android:layout_gravity="center_vertical"
        android:layout_alignParentTop="true" android:layout_centerHorizontal="true"/>

    <CheckBox
        android:text="Unchecked"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:id="@+id/check"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>

</RelativeLayout>

这本书关于 setTextOnsetTextOff 的内容有误吗? java 代码或 xml 有问题吗?

setTextOnsetTextOff 函数用于根据 Switch 的状态设置标签。

文字"The switch is: On"只是您Switch的标签,并非 传达你的 Switch.

的状态

要达到您想要的结果,您需要调用 setShowText(true):

sw = (Switch)findViewById(R.id.swish);
sw.setShowText(true);

或者您可以将其添加到您的 XML。

<Switch
        android:layout_width="453dp"
        android:layout_height="100dp"
        android:id="@+id/swish"
        android:layout_gravity="center_vertical"
        android:layout_alignParentTop="true"     
        android:showText="true"/>

正如@Simon M 所观察到的,这个 xml 和 java 片段产生一致的输出,如下面的屏幕所示。

<Switch
    android:layout_width="453dp"
    android:layout_height="100dp"
    android:id="@+id/swish"
    android:layout_gravity="center_vertical"
    android:textOn="ON!!"
    android:textOff="OFF!"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"/>



    sw = (Switch)findViewById(R.id.swish);
    sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          // absolutely nothing
        });

编辑

以下 xml 和 java 产生了文本的目标:

<Switch
    android:layout_width="453dp"
    android:layout_height="100dp"
    android:id="@+id/swish"
    android:layout_gravity="center_vertical"
    android:layout_alignParentTop="true"
    android:text="This switch is...OFF"
    android:checked="false"
    android:layout_centerHorizontal="true"/>



    sw = (Switch)findViewById(R.id.swish);
    sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked)
                sw.setText("Switch is ON!");
            else
                sw.setText("Switch is OFF!");
        }
    });

...这是: