上周使用Android的switch模仿iOS的左右滑动开关控件,代码如下:
aty_switch.xml:
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="com.example.suhongwei897.learnandroid.aty.AtySwitch">
<Switch
android:id="@+id/mySwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:switchMinWidth="30dp"
android:textOff=""
android:textOn=""
android:thumb="@drawable/thumb"
android:thumbTextPadding="16dp"
android:track="@drawable/track" />
</RelativeLayout>
track.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/track_on"/>
<item android:state_selected="false" android:drawable="@drawable/track_off"/>
</selector>
track_on.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#EB520E" />
<size android:width="40dp"
android:height="30dp"/>
<corners
android:radius="15dp"/>
</shape>
track_off.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="#bdbdbd" />
<size android:width="40dp"
android:height="30dp"/>
<corners
android:radius="15dp"/>
</shape>
thumb.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/thumb_on"/>
<item android:state_selected="false" android:drawable="@drawable/thumb_off"/>
</selector>
thumb_on.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@android:color/white" />
<stroke
android:width="1dp"
android:color="#EB520E" />
<size
android:width="30dp"
android:height="30dp" />
</shape>
thumb_off.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@android:color/white" />
<stroke
android:width="1dp"
android:color="#bdbdbd" />
<size
android:width="30dp"
android:height="30dp" />
</shape>
AtySwitch.class:
mySwitch = (Switch) findViewById(R.id.mySwitch);
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mySwitch.setSelected(isChecked);
}
});
以下两个值都是需要设置的:
android:switchMinWidth="30dp"
android:thumbTextPadding="16dp"