我不知道如何做#3和#1和#2,我尝试了以下xml,但它不起作用:
<Switch
android:id="@+id/plug_switch"
android:layout_width="120dip"
android:layout_height="10dp"
android:maxHeight="10dp"
android:layout_below="@id/plug_graph_layout"
android:layout_centerHorizontal="true"
android:minWidth="100dp"
android:thumb="@drawable/plugs_button"
android:track="@drawable/btntoggle_selector"
android:textOn=""
android:textOff=""
android:width="120dip" />
有人可以帮助我#1,#2和#3。
由于
答案 0 :(得分:18)
添加此android:switchMinWidth="56dp"
并尝试
<Switch
android:id="@+id/plug_switch"
android:layout_width="120dip"
android:layout_height="10dp"
android:maxHeight="10dp"
android:thumbTextPadding="25dp"
android:switchMinWidth="56dp"
android:layout_below="@id/plug_graph_layout"
android:layout_centerHorizontal="true"
android:minWidth="100dp"
答案 1 :(得分:7)
这是一个如何改变你的swicth宽度的小例子, 我希望它会帮助一些人..
1)使用拇指颜色(color_thumb.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<size android:height="40dp" />
<gradient android:height="40dp" android:startColor="#FF569BDA" android:endColor="#FF569BDA"/>
2)轨道的灰色(gray_track.xml)
shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"
>
<size android:height="40dp" />
<gradient android:height="40dp" android:startColor="#dadadada" android:endColor="#dadadada"/>
3)拇指选择器(thumb.xml)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/gray_track" />
<item android:state_pressed="true" android:drawable="@drawable/color_thumb" />
<item android:state_checked="true" android:drawable="@drawable/color_thumb" />
<item android:drawable="@drawable/gray_track" />
4)轨道选择器(track.xml)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/color_thumb" />
<item android:drawable="@drawable/gray_track" />
最后在开关
使用
android:switchMinWidth="56dp"
android:thumb="@drawable/thumb"
android:track="@drawable/track"
答案 2 :(得分:0)
final int switchWidth = Math.max(
mSwitchMinWidth,
2 * mThumbWidth + paddingLeft + paddingRight);
final int switchHeight = Math.max(trackHeight, thumbHeight);
mSwitchWidth = switchWidth;
上面的代码是Switch类中的方法onMeasure()
,设置android:switchMinWidth
无法正确更改宽度,
唯一简单的方法是通过反射来动态更改字段mSwitchWidth
:
try {
Class clazz = Class.forName(Switch.class.getName());
final Field switchWidth = clazz.getDeclaredField("mSwitchWidth");
if (switchWidth != null) {
switchWidth.setAccessible(true);
int width = widthWhateverYouWant;
switchWidth.set(switchClassInstance, width);
setMeasuredDimension(width, getMeasuredHeight());
return;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
不要忘记setMeasuredDimension(width, getMeasuredHeight());
,
因为Switch的measuredWidth
不是基于字段mSwitchWidth
。
我想改变高度并不难,因为您知道如何改变宽度:)