2012-03-30 171 views
11

在Android中Toggle buttons是看起來像下面 -切換按鈕

Android

我們可以修改這個像下面Iphone風格 -

Iphone

而且,我們可以包括切換按鈕的iphone功能也像拖動切換功能一樣。

如何完成此操作?提前致謝。此鏈接

+0

見我的回答:http://www.mokasocial.com/2011/07/ sexly-styled-toggle-buttons-for-android/ – 2012-03-30 09:42:45

+0

downvote的原因是什麼? – Praveenkumar 2012-10-16 16:11:53

+0

這不是我,我不會爲這樣一個問題而低估,但我想那是因爲你還沒有寫過你迄今爲止所嘗試過的內容,只是等待一個完整的答案,也許還因爲它在Android指南中說過:不要模仿其他平臺的UI元素http://developer.android.com/design/patterns/pure-android.html – 2012-10-17 19:55:07

回答

17

更多信息:http://www.mokasocial.com/2011/07/sexily-styled-toggle-buttons-for-android/

<ToggleButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/toggle_me"/> 

和繪製的將是這樣的:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" 
     android:drawable="@drawable/toggle_me_on" /> <!-- checked --> 
    <item android:drawable="@drawable/toggle_me_off" /> <!-- default/unchecked --> 
</selector> 
+0

+1好方法。 – Praveenkumar 2012-03-30 07:52:16

+0

當我在這裏發佈我的問題時,我已經有了這個鏈接。無論如何,感謝您的鏈接 – Praveenkumar 2012-03-30 09:43:53

+0

也許你可以考慮接受這個答案,如果它適合你的需求... – 2012-03-30 09:46:24

0

承擔按鈕關閉的,所有的圖像和類似相對佈局進行佈局這

  <RelativeLayout 
       android:id="@+id/setting1" 
       android:layout_width="90dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentTop="true" 
       android:background="@drawable/switchon" 
       android:clickable="true" 
       android:onClick="setting1Click" > 

       <ImageView 
        android:id="@+id/settingicon" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:src="@drawable/switchball" /> 

       <TextView 
        android:id="@+id/calsettingtxt" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerVertical="true" 
        android:layout_marginRight="10dp" 
        android:layout_toLeftOf="@+id/settingicon" 
        android:text="@string/settingon" 
        android:textColor="@color/black" 
        android:textSize="18sp" 
        android:textStyle="bold" /> 
      </RelativeLayout> 

然後在代碼時,當按下ma ke背景資源爲關

6

使用以下代碼Android-Switch-Demo示例。我可以得到所需的輸出。應用程序的

public MySwitch(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 

    mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 
    Resources res = getResources(); 
    mTextPaint.density = res.getDisplayMetrics().density; 
    mTextPaint.setShadowLayer(0.5f, 1.0f, 1.0f, Color.BLACK); 

    TypedArray a = context.obtainStyledAttributes(attrs, 
      R.styleable.MySwitch, defStyle, 0); 

    mThumbDrawable = a.getDrawable(R.styleable.MySwitch_thumb); 
    mTrackDrawable = a.getDrawable(R.styleable.MySwitch_track); 
    mTextOn = a.getText(R.styleable.MySwitch_textOn); 
    mTextOff = a.getText(R.styleable.MySwitch_textOff); 
    mTextOutsideTrack = a.getBoolean(R.styleable.MySwitch_textOutsideTrack, false); 
    mTextOnThumb = a.getBoolean(R.styleable.MySwitch_textOnThumb, false); 
    mThumbTextPadding = a.getDimensionPixelSize(R.styleable.MySwitch_thumbTextPadding, 0); 
    mTrackTextPadding = a.getDimensionPixelSize(R.styleable.MySwitch_trackTextPadding, 0); 
    mSwitchMinWidth = a.getDimensionPixelSize(R.styleable.MySwitch_switchMinWidth, 0); 
    mSwitchMinHeight = a.getDimensionPixelSize(R.styleable.MySwitch_switchMinHeight, 0); 
    mSwitchPadding = a.getDimensionPixelSize(R.styleable.MySwitch_switchPadding, 0); 

    mTrackDrawable.getPadding(mTrackPaddingRect) ; 
    //Log.d(TAG, "mTrackPaddingRect=" + mTrackPaddingRect); 
    mThumbDrawable.getPadding(mThumbPaddingRect); 
    //Log.d(TAG, "mThumbPaddingRect=" + mTrackPaddingRect); 


    int appearance = a.getResourceId(R.styleable.MySwitch_switchTextAppearanceAttrib, 0); 
    if (appearance != 0) { 
     setSwitchTextAppearance(context, appearance); 
    } 
    a.recycle(); 

    ViewConfiguration config = ViewConfiguration.get(context); 
    mTouchSlop = config.getScaledTouchSlop(); 
    mMinFlingVelocity = config.getScaledMinimumFlingVelocity(); 

    // Refresh display with current params 
    refreshDrawableState(); 
    setChecked(isChecked()); 
    this.setClickable(true); 
    //this.setOnClickListener(clickListener); 
} 

截圖 -

image

+0

它發生在某些設備上,swtch沒有顯示顏色(灰色表示開啓和關閉),在某些設備上它的尺寸非常大。任何解決方法? – 2014-01-06 09:23:40

+0

@TheUnknown不,我沒有解決這個問題。一直在與iOS開發工作。 – Praveenkumar 2014-01-06 09:43:24

+0

哦,好的..謝謝你:) – 2014-01-06 10:25:44

6

如果你想與形狀(不使用圖像)做試試這個。目前即時通訊使用在自定義複選框 enter image description here enter image description here

<com.myapp.views.MyCheckBox xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@android:id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="5dp" 
     android:button="@null" 
     android:checked="false" 
     android:clickable="false" 
     android:drawableRight="@drawable/checkbox_selector" 
     android:focusable="false" 
     android:textColor="@color/orange" /> 

checkbox_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:state_checked="false" 
     android:drawable="@drawable/toggle_button_off" /> <!-- pressed --> 
    <item android:state_checked="true" 
     android:drawable="@drawable/toggle_button_on" /> <!-- focused --> 
    <!-- default --> 
    <item 
     android:drawable="@drawable/toggle_button_off" /> 
</selector> 

toggle_button_off.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/toggle_background_off"></item> 
    <item 


     android:drawable="@drawable/white_toggle_icon" 
     android:left="2dp" 
     android:right="27.5dp" 
     android:bottom="1.5dp" 
     android:top="1.5dp"></item> 
</layer-list> 

toggle_button_on.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/toggle_background_on"></item> 

    <item 


     android:drawable="@drawable/white_toggle_icon" 
     android:right="2dp" 
     android:left="27.5dp" 
     android:bottom="1.5dp" 
     android:top="1.5dp"></item> 
</layer-list> 

toggle_background_off.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 


    <size android:height="32dp" android:width="60dp"/> 
    <solid android:width="1dp" android:color="#919090"/> 

    <corners android:radius="18dp" /> 

</shape> 

toggle_background_on.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 


    <size android:height="32dp" android:width="60dp"/> 
    <solid android:width="1dp" android:color="@color/orange"/> 

    <corners android:radius="18dp" /> 
</shape> 

white_toggle_icon.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
<solid android:color="#ffffff"/> 
    <stroke android:width="2dp" android:color="#fff" /> 
    <size android:width="25dp" android:height="25dp"/> 
</shape> 
+0

請解釋你如何自定義** com.myapp.views.MyCheckBox **? – 2017-07-26 06:22:19

+0

這是一個很好的答案,但刷卡不能這樣工作 – xanexpt 2017-08-01 13:51:08

+0

很好的答案..謝謝.. – 2017-08-08 05:56:16