我有以下代码,根据开关是打开还是关闭显示不同的文字。但是当我按下开关时,开关上没有显示任何内容。
MainActivity.java
package com.hfad.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;
public class MainActivity extends Activity {
Switch sw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sw=(Switch)findViewById(R.id.switchdemo);
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");
}
}
}
);
}
}
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Switch
android:id="@+id/switchdemo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
答案 0 :(得分:1)
Switch在运行时不支持setTextOn / setTextOff。
有一个黑客的工作:
你需要一个扩展switch的类并使用它:
@Override
public void requestLayout() {
IslLog.i(TAG, "requestLayout");
try {
java.lang.reflect.Field mOnLayout = Switch.class.getDeclaredField("mOnLayout");
mOnLayout.setAccessible(true);
mOnLayout.set(this, null);
java.lang.reflect.Field mOffLayout = Switch.class.getDeclaredField("mOffLayout");
mOffLayout.setAccessible(true);
mOffLayout.set(this, null);
} catch (Exception x) {
Log.e(TAG, x.getMessage(), x);
}
super.requestLayout();
}
然后实施该课程&amp;用这个:
sw.setTextOn("Whatever");
sw.requestLayout();
答案 1 :(得分:0)
简单地替换
sw.setTextOn("This switch is: on");
与
sw.setText("This switch is: on");
和
sw.setTextOff("This switch is: off");
与
sw.setText("This switch is: off");
它的工作。