2012-05-21 15 views
8

SwitchPreference आईसीएस में एंड्रॉइड-सपोर्ट-वी 4 लाइब्रेरी में संगत है? मैं कुछ पुरानी परियोजनाओं को अपडेट करने की कोशिश कर रहा हूं और यदि संभव हो तो स्विचप्रिंटेंस का उपयोग करना चाहूंगा।स्विचप्रिफरेंस (पूर्व आईसीएस) के लिए संगतता?

मुझे पता है कि मैं एपीआई संस्करण को अलग करने के लिए एक अलग संसाधन फ़ाइल बना सकता हूं, लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा।

+0

संक्षिप्त उत्तर नहीं है, वर्तमान में 'स्विचप्रिफरेंस' समर्थन लाइब्रेरी में उपलब्ध नहीं है। हालांकि, अगर किसी के पास पहले से नहीं है, तो इसे वापस करने के लिए बहुत मुश्किल नहीं होना चाहिए। –

उत्तर

8

क्या स्विचप्रिएंशन आईसीएस में एंड्रॉइड-सपोर्ट-वी 4 लाइब्रेरी में संगत है?

नहीं, क्षमा करें।

हालांकि, अगर किसी के पास पहले से नहीं है, तो इसे बैकपोर्ट करने में बहुत मुश्किल नहीं होनी चाहिए।

वास्तव में, यह एक दर्द का एक सा हो सकता है, क्योंकि यह भी स्विच का बैकपोर्ट की आवश्यकता है, और विजेट backporting कभी कभी परेशानी है क्योंकि वे अक्सर पैकेज-निजी तरीकों कि backports उपयोग नहीं कर सकते का उपयोग करें।

मुझे पता है कि मैं एपीआई संस्करण को अलग करने के लिए एक अलग संसाधन फ़ाइल बना सकता हूं, लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा।

खैर, कि निश्चित रूप से विकल्पों से रास्ता आसान हो जाएगा:

  • ऊपर उल्लिखित backport

  • है कि आप नए उपकरणों पर SwitchPreference उपयोग करने के लिए अनुमति देता है उर्फ ​​Preference तंत्र के कुछ प्रकार बनाने और CheckBoxPreference पुराने उपकरणों पर केवल एक संसाधन फ़ाइल

+0

यही मुझे संदेह है। धन्यवाद! –

+0

@ कॉमन्सवेयर क्यों न केवल उसी पैकेज में अपना कस्टम स्विच बनाएं? –

+0

@ क्रिस्टोफरपेरी: मुझे नहीं पता कि आप किस बात का जिक्र कर रहे हैं, क्षमा करें। – CommonsWare

5

एंड्रॉइड-स्विच-बैकपोर्ट में एक स्विचप्रिफर है जो एंड्रॉइड 2.1+ पर काम करता है।

https://github.com/BoD/android-switch-backport

+0

इन चीज़ों के बारे में मुझे नापसंद करने वाली एकमात्र चीज यह है कि उन्हें बंडल नहीं किया जा सकता है और ऐप में जार इत्यादि के रूप में शामिल किया जा सकता है। इसके बजाय, आपको अपने ऐप में कई (81) रेज फाइलें डालनी होंगी, जो आपके अपने संसाधनों को डूबती हैं। यह एक शर्म की बात है कि एंड्रॉइड-समर्थन lib इसमें शामिल नहीं है। – Doomsknight

+0

निर्देश और समर्थन इस के साथ बहुत बेहतर हैं - https://github.com/ankri/SwitchCompatLibrary – LoungeKatt

+0

@TwistedUmbrella SwitchCompatLibrary SwitchPreference प्रदान नहीं करता है इसलिए इस प्रश्न में सहायता नहीं करता है। – Intrications

0

मैं हर समाधान है कि मैंने पाया, लेकिन उनमें से गैर मेरी जरूरतों फिट रहे थे की कोशिश की है, इसलिए मैं अपने विजेट जो nineOld अनुकूलता lib से ObjectAnimator इस्तेमाल किया है और किसी भी एंड्रॉयड एपीआई पर बहुत ठीक काम करता है है बनाया।

import android.widget.RelativeLayout; 
import com.myapp.utilities.AppUtils; 
import com.nineoldandroids.animation.Animator; 
import com.nineoldandroids.animation.AnimatorListenerAdapter; 
import com.nineoldandroids.animation.ObjectAnimator; 

public class SwitchButton extends RelativeLayout { 

public static final int TEXT_SIZE = 11; 

public float HANDLE_SHIFT = -40f; 
public float TEXT_RIGHT_SHIFT = 40f; 
public static int BUTTON_ID = 0x00009999; 
public static int TEXT_ID = 0x00008888; 


private Button handleButton; 
private RoboTextView textView; 
private boolean switchEnabled; 
private String yesStr; 
private String noStr; 
private int TEXT_LEFT_PADDING = 13; 

private ObjectAnimator animateHandleLeftShift; 
private ObjectAnimator animateHandleRightShift; 
private int HANDLE_BUTTON_HEIGHT = 22; 
private int HANDLE_BUTTON_WIDTH = 42; 
private ObjectAnimator animateTextLeftShift; 
private ObjectAnimator animateTextRightShift; 


public SwitchButton(Context context) { 
    super(context); 
    onCreate(context); 
} 


private void onCreate(Context context) { 

    float density = context.getResources().getDisplayMetrics().density; 

    TEXT_LEFT_PADDING *= density; 

    HANDLE_BUTTON_HEIGHT *= density; 
    HANDLE_BUTTON_WIDTH *= density; 

    HANDLE_SHIFT *= density; 
    TEXT_RIGHT_SHIFT *= density; 

    yesStr = getContext().getString(R.string.yes).toUpperCase(); 
    noStr = getContext().getString(R.string.no).toUpperCase(); 

    {// Button 
     handleButton = new Button(getContext()); 
     RelativeLayout.LayoutParams buttonParams = new LayoutParams(HANDLE_BUTTON_WIDTH, HANDLE_BUTTON_HEIGHT); 
     buttonParams.addRule(RelativeLayout.CENTER_VERTICAL); 
     buttonParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

     handleButton.setBackgroundResource(R.drawable.button_switch_handle_selector); 
     handleButton.setId(BUTTON_ID); 

     addView(handleButton, buttonParams); 
    } 


    {// Text 
     textView = new RoboTextView(getContext()); 
     LayoutParams textParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     textParams.addRule(RelativeLayout.CENTER_VERTICAL); 

     textView.setText(yesStr); 
     textView.setTextColor(getContext().getResources().getColor(R.color.new_normal_gray)); 
     textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, TEXT_SIZE); 
     textView.setPadding(TEXT_LEFT_PADDING, 0, 0, 0); 
     textView.setFont(RoboTextView.ROBOTO_BOLD_FONT); 
     textView.setId(TEXT_ID); 
     float shadowRadius = 0.5f ; 
     float shadowDx = 0; 
     float shadowDy = 1; 
     textView.setShadowLayer(shadowRadius, shadowDx, shadowDy, Color.BLACK); 

     addView(textView, textParams); 
    } 
    initFlipAnimation(); 

} 

@Override 
public void setOnClickListener(OnClickListener l) { 
    handleButton.setOnClickListener(l); 
    textView.setOnClickListener(l); 
} 

public void toggle(View view){ 
    if (AppUtils.HONEYCOMB_PLUS_API && view.getId() == TEXT_ID) { // ignore text clicks 
     return; 
    } 

    switchEnabled = !switchEnabled; 

    if (switchEnabled) { 
     // animate handle to the left 
     animateHandleLeftShift.start(); 
     animateTextLeftShift.start(); 

     textView.setText(noStr); 
    } else { 
     animateHandleRightShift.start(); 
     animateTextRightShift.start(); 

     textView.setText(yesStr); 
    } 
} 

private android.view.animation.Interpolator accelerator = new LinearInterpolator(); 
private static final int DURATION = 70; 

private void initFlipAnimation() { 


    animateHandleLeftShift = ObjectAnimator.ofFloat(handleButton, "translationX", 0f, HANDLE_SHIFT); 
    animateHandleLeftShift.setDuration(DURATION); 
    animateHandleLeftShift.setInterpolator(accelerator); 

    animateHandleRightShift = ObjectAnimator.ofFloat(handleButton, "translationX", HANDLE_SHIFT, 0f); 
    animateHandleRightShift.setDuration(DURATION); 
    animateHandleRightShift.setInterpolator(accelerator); 

    animateHandleLeftShift.addListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator anim) { 
      // TODO 
     } 
    }); 


    animateTextLeftShift = ObjectAnimator.ofFloat(textView, "translationX", 0f, TEXT_RIGHT_SHIFT); 
    animateTextLeftShift.setDuration(DURATION); 
    animateTextLeftShift.setInterpolator(accelerator); 

    animateTextRightShift = ObjectAnimator.ofFloat(textView, "translationX", TEXT_RIGHT_SHIFT, 0f); 
    animateTextRightShift.setDuration(DURATION); 
    animateTextRightShift.setInterpolator(accelerator); 
} 

}

एक्सएमएल

<com.chess.SwitchButton 
    android:id="@+id/ratedGameSwitch" 
    android:layout_width="@dimen/button_switch_width" 
    android:layout_height="@dimen/button_switch_height" 
    android:background="@drawable/button_switch_back" 
    /> 

गतिविधि में/टुकड़ा आप केवल findViewById करने के लिए है और इसे करने के लिए clickListener निर्धारित करते हैं, और onClick कॉलबैक में इसे संभाल:

switchButton = (SwitchButton) optionsView.findViewById(R.id.ratedGameSwitch); 
switchButton.setOnClickListener(this); 


@Override 
public void onClick(View view) { 
    if (view.getId() == SwitchButton.BUTTON_ID || view.getId() == SwitchButton.TEXT_ID){ 
     switchButton.toggle(view); 
    } 
} 
0

यदि आप प्रोग्राम गतिविधि को प्रोग्रामेटिक रूप से बनाना चाहते हैं, तो इस समाधान को आज़माएं।

public class SettingsActivity extends PreferenceActivity { 

    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     PreferenceScreen rootScreen = getPreferenceManager() 
       .createPreferenceScreen(this); 
     setPreferenceScreen(rootScreen); 
     Preference NotifCheck=null; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
      NotifCheck = new SwitchPreference(this); 

     } else { 
      NotifCheck = new CheckBoxPreference(this); 

     } 
     NotifCheck.setKey("yourKey"); 
     NotifCheck.setTitle(R.string.ShowNotification); 
     NotifCheck.setEnabled(true); 
     rootScreen.addPreference(NotifCheck); 
    } 
} 
संबंधित मुद्दे