如何在Android中更改Switch的高度和宽度

时间:2013-12-24 14:20:45

标签: android switch-statement

  1. 我喜欢将开关安装在120dp宽度和30dp高度。
  2. 另外我想拇指上没有文字,但是希望拇指覆盖总宽度的一半,所以我希望它是60dp。
  3. 另外,我希望拇指的高度可以从三面看到背景开关的高度。
  4. 我不知道如何做#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。

    由于

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

我想改变高度并不难,因为您知道如何改变宽度:)