按下开关

时间:2015-08-14 12:08:29

标签: android

我有以下代码,根据开关是打开还是关闭显示不同的文字。但是当我按下开关时,开关上没有显示任何内容。

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>

2 个答案:

答案 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");

它的工作。