2012-04-16 88 views
42

在冰淇淋三明治a Switch小部件被引入,顯示一個開關滑塊。如何更改開關小部件的尺寸

我加入了開關這樣的:

<Switch 
    android:layout_width="fill_parent" 
    android:layout_height="48dp" 
    android:textStyle="bold" 
    android:thumb="@drawable/switch_thumb_selector" 
    android:track="@drawable/switch_bg_selector" /> 

軌道和拇指繪圖資源是應該擴展到所有可能的大小9個圖像。 我希望Switch可以在給定邊界內縮放到最大尺寸,但是看起來好像drawable只是在提供的空間內居中。

是否可以增加開關的大小以使其看起來更大?

+1

面向valid..m同樣的問題:( – 2014-01-09 17:48:22

回答

7

我今天處理了類似的問題,我發現從果凍豆開始,您可以使用setSwitchMinWidth(width);來設置整個開關的最小寬度。不過,我也認爲,如果你的文字太大,那麼這個小部件就會在左邊的部分被截斷。更改拇指上的默認文本填充可能會在這裏派上用場,您可以修改setThumbTextPadding(num);

唯一的問題 - 這實際上是一個攔截器 - 到目前爲止,我偶然發現的是,應該根據父容器的大小來擴展開關。對於我包裹在一個自定義的線性佈局的開關(其也提供了回退用於API < = 15),並試圖這樣:

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(w, h, oldw, oldh); 
    if (android.os.Build.VERSION.SDK_INT >= 16) { 
     adaptSwitchWidth(w); 
    } 
} 

@TargetApi(16) 
private void adaptSwitchWidth(int containerWidth) { 
    Switch sw = (Switch) compoundButton; 
    sw.setSwitchMinWidth(containerWidth); 
} 

不幸 - 不管什麼原因笨 - 開關插件不於反應。我試圖在OnLayoutChangeListener中做到這一點,但沒有成功。理想情況下,開關電流的大小也應在該州知,我想自由的空間「分配」到填充這樣的:

int textPadding = Math.max(0, (sw.getWidth() - containerWidth)/4); 
sw.setThumbTextPadding(textPadding); 

sw.getWidth()onSizeChanged()仍返回0,可能是因爲它是仍然沒有妥善佈置。是的,我們快到了......如果你跨越東西絆倒,讓我知道:)

+2

「thumbTextPadding」 是有用的可以用XML可以使用像'機器人:thumbTextPadding = 「3DP」' – situee 2015-05-14 03:25:41

+0

屬性機器人:thumbTextPadding是在定製Switch時對三星設備非常有用 – AB1209 2016-09-08 10:17:16

73

我想,我終於想通了這一點:

  1. 切換字幕大小由<switch android:textSize=""... />
  2. 開關控制拇指文字大小由<switch android:switchTextAppearance="".../>控制。烹飪你自己的風格。這種風格很重要,因爲它控制了拇指的整體寬度(稍後會詳細介紹)。
  3. 整體開關高度由<switch android:track="@drawable/shape_mythumb".../>控制。您使用了九個補丁,我懷疑這是您出現問題的原因。我用了一個<shape android:shape="rectangle"...></shape>,並且成功了。
  4. 調整縮略圖的高度<switch android:thumb="".../>以匹配曲目的高度。拇指可繪製的高度僅對拇指的形狀很重要。它不影響開關的高度。

因此,這裏是我的發現:

  1. 使用<shape>...</shape>可繪製兩個開關拇指和開關軌道。
  2. 兩個drawable的寬度是不相關的。我將其設置爲「0dp」
  3. 軌道的高度決定了交換機的總高度。
  4. 最長的字符串android:textOffandroid:textOn將決定拇指的寬度。這決定了整個交換機的寬度。開關寬度始終是拇指寬度的兩倍。
  5. 如果拇指文字寬度小於軌道高度,拇指形狀將縮小。這可能會扭曲拇指的形狀。如果發生這種情況,請添加空格以增加「關閉」或「開啓」文本的寬度,直到它至少與軌道高度一樣寬。

這是足夠的信息,至少開始設計切換到你想要的大小和形狀。讓我知道,如果你弄清楚別的。

+2

值得讚賞..軌道是決定開關大小的一個因素,而形狀技巧也很有用,我必須經歷艱難的方式來創建9個不同高度的補丁devices.and終於得到這個解決方案。謝謝。 – 2014-01-09 17:59:34

+0

@quantium你有一個特殊的例子呢?因爲我有同樣的問題,但您的解決方案不適合我。我覺得我做錯了什麼。 – 2014-03-06 08:19:12

+0

太棒了!我認爲開關的高度永遠不會改變。謝謝。 – Nirmal 2014-06-13 19:50:47

35

以上答案是正確的。這裏是一個小例子,如何使用形狀繪製 我希望這將幫助一些的..

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"/> 
</shape> 

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"/> 
</shape> 

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" /> 
</selector> 

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" /> 
</selector> 

終於在開關

使用

android:switchMinWidth="56dp" 
android:thumb="@drawable/thumb" 
android:track="@drawable/track" 
+0

我想知道我們在哪裏創建track.xml或thumb.xml文件 – Kishan 2015-12-24 11:45:00

+8

當我使用此代碼時,我的開關消失..任何幫助? – Brandon 2016-02-06 01:45:39

+0

@Kishan,你可以把這些XML文件放在res/drawable/ – 2016-08-02 15:13:42

5

軌道的高度不必在視覺上確定拇指/總開關高度。我添加了一個透明的行程我的軌跡繪製形狀,這導致在賽道上的填充:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <solid android:color="@color/track_color"/> 
    <size android:height="@dimen/track_height" /> 
    <size android:width="@dimen/track_width" /> 

    <!-- results in the track looking smaller than the thumb --> 
    <stroke 
     android:width="6dp" 
     android:color="#00ffffff"/> 
</shape> 
+0

你可以添加填充到你的音軌可繪製,使其完全像一個IOS切換/切換按鈕。 – 2016-01-27 13:45:04

40

使用規模屬性來改變大小爲我工作。

將這些行添加到您的標籤爲xml文件的<switch/>

android:scaleX="2" 
android:scaleY="2" 

您可以根據需要更改比例值。這裏值2使其成倍地增加,同樣值0.5使其成爲一半。

實施例:

 <Switch 
      android:id="@+id/switchOnOff" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:scaleX="2" 
      android:scaleY="2"/> 
+1

看起來像最簡單的方法!謝謝 – Tima 2017-05-12 21:51:18

+2

這是最好和最有效的答案 – Krishna 2017-06-03 09:36:36

+1

謝謝你。它的工作正常。 – sivaprakash 2018-01-19 05:38:40