2015-06-05 5 views
12

मैं इस तरह एक कस्टम स्विच बनाने के लिए कोशिश कर रहा हूँ:एंड्रॉयड स्विच कस्टम बाएँ सही ड्रॉएबल

custom gender switch

जैसे मैं की जरूरत है, तो मैं क्या लगता है कि कुछ है एक छोड़ दिया/सही एक हरे रंग में प्रत्येक drawable/सफेद राज्य, या वैकल्पिक रूप से एक हरे रंग की रूपरेखा के साथ जब एक विकल्प चुना जाना चाहिए।

this जैसी पोस्टों में मुझे क्या समझ में नहीं आता है यह है कि सभी नमूना ड्रॉबल्स दाएं को कैसे प्रदान किए जाते हैं, और फिर भी 'ऑन' बटन बाईं ओर स्लंट होते हैं।

मैं निम्नलिखित 'थंब' ड्रायबल के साथ प्रयास कर रहा हूं।

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@drawable/choice_right"/> 
    <item        android:drawable="@drawable/choice_left"/> 
</selector> 

लेकिन ऐसा लगता है कि यह ड्रॉबल्स से समाप्त होता है। अगर मैंने इस तरह कुछ ट्रैक भी सेट किया है:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" > 

     <stroke 
      android:width="1dp" 
      android:color="@color/text_input"/> 

     <corners 
      android:radius="1dp" 
      android:bottomLeftRadius="4.5dp" 
      android:bottomRightRadius="4.5dp" 
      android:topLeftRadius="4.5dp" 
      android:topRightRadius="4.5dp" > 
    </corners> 
</shape> 

तो मुझे बस एक पतली रेखा मिलती है। तो, मुझे यकीन नहीं है कि आगे क्या प्रयास करें।

उत्तर

9

यह अकेले स्टाइल के साथ नहीं हो सकता है, इसे कस्टम दृश्य कार्यान्वयन की आवश्यकता है। बहुत सारे कोड हैं इसलिए आपके लिए सुझाव आपके लिए https://github.com/hoang8f/android-segmented-control जैसे तृतीय पक्ष पुस्तकालयों का उपयोग करना होगा। इस लाइब्रेरी की कोशिश की और परीक्षण किया गया है ताकि इसे पुनः लिखने के बजाय इसका उपयोग सुरक्षित हो।

+0

तो toggle_widget_background.xml है, शायद इसका जवाब है कि यह 'isn विशेष रूप से एंड्रॉइड उन्मुख डिजाइन और एंड्रॉइड के यूआई तत्वों के साथ डिजाइन करने के लिए डिजाइन को बदलने की जरूरत है –

+0

यह डिज़ाइन आईओएस, bu से लिया गया है नया स्विचकंपैट विजेट इस विजेट के रूप में अच्छा और सरल दिखता है, इसलिए इसे आज़माएं। –

0

अपडेट जवाब

यह करने के लिए आप अपने चयनकर्ता के

रेस/drawable/toggle_layerlist.xml

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

    <stroke 
     android:width="1dp" 
     android:color="@color/text_input"/> 

    <corners 
     android:radius="1dp" 
     android:bottomLeftRadius="4.5dp" 
     android:bottomRightRadius="4.5dp" 
     android:topLeftRadius="4.5dp" 
     android:topRightRadius="4.5dp" > 
    </corners> 
</shape> 
    </item> 

    </layer-list> 

ऐड परत सूची drawable फ़ोल्डर में परत-सूची बनाना चाहिए

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:drawable="@drawable/toggle_layerlist" android:state_checked="true" /> 

    </selector> 

उपयोग पृष्ठभूमि के रूप में इस चयनकर्ता, लेकिन

द्वारा/बंद राज्य में वाकई रिक्त पाठ बनाने के सेट android:textOff="" android:textOn=""

<ToggleButton 
      android:id="@+id/chkState" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/toggle_selector" 
      android:textOff="" 
      android:textOn=""/> 

1

आप इस्तेमाल किया जा सकता RadioGroup दो RadioButton के साथ अन्य राज्य के लिए भी ऐसा ही :

<RadioGroup 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" 
       android:orientation="horizontal"> 

      <RadioButton 
        android:id="@+id/male_radio_button" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="@drawable/selector_radio_btn_text" 
        android:background="@drawable/selector_radio_btn_left_bg" 
        android:gravity="center" 
        android:button="@null" 
        android:text="@string/male_radio_text" 
        /> 

      <RadioButton 
        android:id="@+id/female_radio_button" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="@drawable/selector_radio_btn_text" 
        android:background="@drawable/selector_radio_btn_right_bg" 
        android:gravity="center" 
        android:button="@null" 
        android:text="@string/female_radio_text"/> 
     </RadioGroup> 

जहां selector_radio_btn_text.xml पाठ रंग चयनकर्ता है:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checked="true" android:color="@color/checkbox_text_color_checked"/> 
<item android:state_checked="false" android:color="@color/checkbox_text_color"/> 

और selector_radio_btn_left_bg (दाएं bg) .xml बाएँ और दाएँ पक्ष

5

मुझे लगता है कि आप here कि आपकी समस्या का समाधान करना चाहिए पा सकते हैं एक उदाहरण एप्लिकेशन बनाया है जहां एक है। आप this लाइब्रेरी देख सकते हैं जिसमें सेगमेंट कंट्रोल का उचित कार्यान्वयन है।

मूल रूप से मुझे लगता है कि एक डिफ़ॉल्ट की 2. दो ButtonsweightSum 1 के एक weight साथ जोड़ रहे हैं और कुछ तर्क उन दोनों के बीच टॉगल करने के लिए लागू किया जाता है के साथ LinearLayout फैली एक कस्टम नियंत्रण बनाया। टॉगल पर एक कस्टम इवेंट निकाल दिया जाता है जो इस इंटरफ़ेस पर बनाया गया है।

public interface SwitchToggleListener { 
    void onSwitchToggle(SwitchToggleState switchToggleState); 
} 

मैंने बटनों को स्टाइल करने के लिए drawable संसाधनों का उपयोग किया।

अंतिम परिणाम इस

enter image description here

1
उसके किसी भी बाहरी libaray या समर्थन पुस्तकालय उपयोग करने के बजाय

इस RadioGroup और रेडियो बटन का उपयोग करके आसानी से किया जा सकता कैसा दिखता था। जैसा कि "दिमित्री" ने अपने उत्तर में उल्लेख किया है, मैंने भी वही काम हासिल करने के लिए उपयोग किया है। यहाँ मेरा उत्तर की कॉपी पेस्ट प्रश्न के लिए दिए गए How to custom switch button?

<RadioGroup 
    android:checkedButton="@+id/offer" 
    android:id="@+id/toggle" 
    android:layout_width="match_parent" 
    android:layout_height="30dp" 
    android:layout_marginBottom="@dimen/margin_medium" 
    android:layout_marginLeft="50dp" 
    android:layout_marginRight="50dp" 
    android:layout_marginTop="@dimen/margin_medium" 
    android:background="@drawable/pink_out_line" 
    android:orientation="horizontal"> 

    <RadioButton 
     android:layout_marginTop="1dp" 
     android:layout_marginBottom="1dp" 
     android:layout_marginLeft="1dp" 
     android:id="@+id/search" 
     android:background="@drawable/toggle_widget_background" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:button="@null" 
     android:gravity="center" 
     android:text="Search" 
     android:textColor="@color/white" /> 

    <RadioButton 
     android:layout_marginRight="1dp" 
     android:layout_marginTop="1dp" 
     android:layout_marginBottom="1dp" 
     android:id="@+id/offer" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="@drawable/toggle_widget_background" 
     android:button="@null" 
     android:gravity="center" 
     android:text="Offers" 
     android:textColor="@color/white" /> 
</RadioGroup> 

pink_out_line.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<corners android:radius="2dp" /> 
<solid android:color="#80000000" /> 
<stroke 
    android:width="1dp" 
    android:color="@color/pink" /> 
</shape> 

 <?xml version="1.0" encoding="UTF-8"   standalone="no"?> 
     <selector  xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/pink" android:state_checked="true" /> 
    <item android:drawable="@color/dark_pink" android:state_pressed="true" /> 
    <item android:drawable="@color/transparent" /> 
    </selector> 
संबंधित मुद्दे