I don't know much about switch issues, but you can use ToggleButton as follows:
Define the button in the layout:
<ToggleButton android:id="@+id/your_awesome_toggle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:gravity="center_vertical|center_horizontal" android:layout_marginRight="15dp" android:textOn="" android:textOff="" android:background="@drawable/toggle_button" />
Create a selector:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="false" android:state_focused="false" android:drawable="@drawable/switch_off_btn" /> <item android:state_checked="true" android:state_focused="false" android:drawable="@drawable/switch_on_btn" /> <item android:drawable="@drawable/switch_off_btn" /> </selector>
OnClickListener :
toggleOnOff = (ToggleButton) findViewById(R.id.your_awesome_toggle); toggleOnOff.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateButtons(); if(toggleOnOff.isChecked()){ SharedPreferences emailPrefs = getSharedPreferences(rememberToggleOnOff,MODE_PRIVATE); SharedPreferences.Editor editor = yourPrefs.edit(); editor.putBoolean("mon", true); editor.commit(); } else { SharedPreferences emailPrefs = getSharedPreferences(rememberToggleOnOff,MODE_PRIVATE); SharedPreferences.Editor editor = yourPrefs.edit(); editor.putBoolean("mon", false); editor.commit(); } } }); checkToggleState();
checkToggleState method:
private void checkToggleState() { SharedPreferences yourPrefs = getSharedPreferences(rememberToggleOnOff,MODE_PRIVATE); boolean mON = yourPrefs.getBoolean("mon", true); if(mON) { toggleOnOff.setChecked(true); } else { toggleOnOff.setChecked(false); } }
Andrei
source share