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>
这本书关于 setTextOn
和 setTextOff
的内容有误吗? java 代码或 xml 有问题吗?
setTextOn
和 setTextOff
函数用于根据 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!");
}
});
...这是:
接下来的两个语句产生 正确的 左下方屏幕:
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>
这本书关于 setTextOn
和 setTextOff
的内容有误吗? java 代码或 xml 有问题吗?
setTextOn
和 setTextOff
函数用于根据 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!");
}
});
...这是: