2011-01-28 15 views
18

ऐप में मैं काम कर रहा हूं, मैं ToggleButton प्रदान करता हूं, दोनों के बजाय एक बहु-राज्य (मेरे मामले में, तीन) टॉगल बटन रखना चाहता हूं। मैंने स्रोत के बाद Button का विस्तार करने का प्रयास किया है, लेकिन इसके स्रोत पर काफी ईमानदारी से पढ़ना थोड़ा जबरदस्त हो गया है।मल्टी-स्टेट टॉगल बटन

क्या केवल एक चयनकर्ता एक्सएमएल या कुछ का उपयोग करके तीन-राज्य टॉगल बटन करने का कोई तरीका है, या शायद एक और तरीका जिसे मैंने नहीं सोचा है? मैं इसे कैसे करना है इसके नुकसान के बजाय।

उत्तर

10

आप निश्चित रूप से एक चयनकर्ता को परिभाषित कर सकते हैं जो पृष्ठभूमि में उपयोग करने के लिए तीन प्रविष्टियां हैं। सवाल यह है कि चयनकर्ता के लिए आप किस बटन विशेषता का उपयोग कर सकते हैं। आपके पास दो बुलियन गुण हो सकते हैं, ए और बी कहें, और ए, बी, और डिफ़ॉल्ट के मामले में चयनकर्ता को परिभाषित करें। (ए & & बी, ए को पूरा करेगा तो अधिक उचित रूप से वे एक के रूप में के बारे में सोचा जा सकता है,! एक & & बी, और! एक & &! बी।) आप मौजूदा विशेषताओं को ओवरलोड कर सकते हैं (, ध्यान केंद्रित, आदि चयनित) या, अधिक सुंदरता, in this thread वर्णित नुस्खा का उपयोग करके अपने स्वयं के कस्टम विशेषताओं को परिभाषित करें।

+0

आपके द्वारा लिंक किए गए धागे को देखते हुए: मैं चरण 1 समझता हूं, लेकिन 2 मेरे पास कुछ प्रश्न हैं। एक नया दृश्य बनाने में, क्या दृश्य, बटन, या कुछ और विस्तार करना बेहतर होगा? और क्या रचनात्मक और ऑनक्रेट ड्रायबलस्टेट() पर अन्य विधियों को अधिभारित किया जाना चाहिए? माफ़ी माफ़ी अगर ये बुनियादी हैं, तो यह मेरा पहला असली ऐप है। – Melde

+0

कभी नहीं, यह काम कर रहा है! सही दिशा में धक्का के लिए धन्यवाद, मैं इसकी सराहना करता हूं। – Melde

+0

@moonfire आपका कोड स्वामित्व है? मैं एक त्रि-राज्य टॉगल बटन भी बनाने की कोशिश कर रहा हूं, और अपने सिर को लपेटने के लिए कुछ अन्य समाधान देखना चाहता हूं कि इसे कैसे किया जाए। – JohnMetta

18

मैं एक बहु राज्य टॉगल बटन लागू किया, स्रोत कोड here

है यह है कि यह कैसे दिखता है:

enter image description here

और यह इसका इस्तेमाल करने के लिए काफी आसान है:

<org.honorato.multistatetogglebutton.MultiStateToggleButton 
    android:id="@+id/mstb_multi_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dip" 
    mstb:values="@array/planets_array" /> 

आपकी गतिविधि में:

MultiStateToggleButton button2 = (MultiStateToggleButton) this.findViewById(R.id.mstb_multi_id); 
button2.setOnValueChangedListener(new ToggleButton.OnValueChangedListener() { 
    @Override 
    public void onValueChanged(int value) { 
     Log.d(TAG, "Value: " + value); 
    } 
}); 
+0

धन्यवाद, मैंने परीक्षण किया है और ठीक काम करता है;) –

+0

आपने तस्वीर में इसे कैसे अनुकूलित किया? अपने दस्तावेज़ों में आपने किसी भी custimizations का उल्लेख नहीं किया है। – Choletski

+0

यह एक पुराना संस्करण है, पुराने कामों की तलाश करने का प्रयास करें। लेकिन मूल रूप से आपको पृष्ठभूमि ड्रॉबल्स को संशोधित करना होगा। – jlhonora

10

आप इसे प्राप्त करने के लिए कस्टम छवि बटन बना सकते हैं, आपको इस मामले में 3 अलग-अलग छवियों की आवश्यकता है। यदि आप चाहें तो आप और अधिक राज्य भी जोड़ सकते हैं।

public class FlashButton extends ImageButton { 

    public enum FlashEnum { 
     AUTOMATIC, ON, OFF 
    } 

    public interface FlashListener { 
     void onAutomatic(); 
     void onOn(); 
     void onOff(); 
    } 

    private FlashEnum mState; 
    private FlashListener mFlashListener; 

    public FlashButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     //Sets initial state 
     setState(FlashEnum.AUTOMATIC); 
    } 


    @Override 
    public boolean performClick() { 
     super.performClick(); 
     int next = ((mState.ordinal() + 1) % FlashEnum.values().length); 
     setState(FlashEnum.values()[next]); 
     performFlashClick(); 
     return true; 
    } 


    private void performFlashClick() { 
     if(mFlashListener == null)return; 
     switch (mState) { 
      case AUTOMATIC: 
       mFlashListener.onAutomatic(); 
       break; 
      case ON: 
       mFlashListener.onOn(); 
       break; 
      case OFF: 
       mFlashListener.onOff(); 
       break; 
     } 
    } 

    private void createDrawableState() { 
     switch (mState) { 
      case AUTOMATIC: 
       setImageResource(R.drawable.ic_flash_auto); 
       break; 
      case ON: 
       setImageResource(R.drawable.ic_flash_on); 
       break; 
      case OFF: 
       setImageResource(R.drawable.ic_flash_off); 
       break; 
     } 
    } 


    public FlashEnum getState() { 
     return mState; 
    } 

    public void setState(FlashEnum state) { 
     if(state == null)return; 
     this.mState = state; 
     createDrawableState(); 

    } 

    public FlashListener getFlashListener() { 
     return mFlashListener; 
    } 

    public void setFlashListener(FlashListener flashListener) { 
     this.mFlashListener = flashListener; 
    } 

} 
+0

आप लोगों को आलसी बना रहे हैं;) – yajnesh

2

RadioGroup और स्टाइल रेडियो अंदर क्यों नहीं उपयोग करें?

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

    <RadioButton 
     android:layout_width="match_parent" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:background="@drawable/your_drawable_selector" 
     android:button="@android:color/transparent" 
     android:gravity="center_horizontal" //center text 
     android:text="text" 
     /> 
... 
संबंधित मुद्दे