2016-01-20 2 views
5

android.support.v7.preference.EditTextPreference के लिए इनपुट विधि प्रकार निर्दिष्ट करने का कोई तरीका है?एंड्रॉइड समर्थन EditTextPreference इनपुट प्रकार

+1

[संबंधित एंड्रॉइड समस्या] (https://code.google.com/p/android/issues/detail?id=185164), दृष्टि में कोई फिक्स नहीं है। – aha

उत्तर

3

अब कोई Android-Support-Preference-V7-Fix लाइब्रेरी का उपयोग कर सकता है।
फिक्स्ड EditTextPreferenceEditText पर एक्सएमएल विशेषताओं (जैसे inputType) को अग्रेषित करता है, जैसे मूल वरीयता।

+0

यह लाइब्रेरी android.support.v7.preference से कहीं बेहतर है। अधिक सुविधा समृद्ध, और थीम के लिए आसान है। –

2

संपादित करें: पिछले जवाब नीचे शेयर android.preference.EditTextPreference पर बनाए गए थे और दुर्भाग्य से android.support.v7.preference.EditTextPreference के लिए काम नहीं करते।

android.preference.EditTextPreferenceEditText नियंत्रण में प्रोग्राम के रूप में बनाया गया है और AttributeSetPreference से इसे करने के लिए पारित कर दिया है।

android.preference.EditTextPreference Source:

public EditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 

    mEditText = new EditText(context, attrs); 

    // Give it an ID so it can be saved/restored 
    mEditText.setId(com.android.internal.R.id.edit); 

    /* 
    * The preference framework and view framework both have an 'enabled' 
    * attribute. Most likely, the 'enabled' specified in this XML is for 
    * the preference framework, but it was also given to the view framework. 
    * We reset the enabled state. 
    */ 
    mEditText.setEnabled(true); 
} 

व्हाइट हमें Preference पर ही inputType स्थापित करने के लिए और यह EditText के माध्यम से पारित कर दिया है की अनुमति देता है। दुर्भाग्य से android.support.v7.preference.EditTextPreference बनाने के लिए इस पर आसपास काम कर रहे Layout

में EditText विचारों के लिए this issue देखें प्रकट होता है:

बस आपको यह बताना चाहता था कि EditTextPreferenceDialogFragment उपवर्गीकरण और onAddEditTextToDialogView अधिभावी के साथ-साथ करने के लिए PreferenceFragmentCompat # onDisplayPreferenceDialog अधिभावी दिखाएं कि आवश्यकतानुसार उपclass ठीक काम कर रहा है, मदद के लिए धन्यवाद।


अपने स्वयं के वर्ग कि EditTextPreference फैली बनाएँ और यह वहाँ की स्थापना की।

यहाँ मेरी EditIntegerPreference वर्ग है:

public class EditIntegerPreference extends EditTextPreference { 
    public EditIntegerPreference(Context context) { 
     super(context); 
    } 

    public EditIntegerPreference(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
    } 

    public EditIntegerPreference(Context context, AttributeSet attributeSet, int defStyle) { 
     super(context, attributeSet, defStyle); 

     getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); 
     getEditText().setSelectAllOnFocus(true); 
    } 

    @Override 
    public String getText() { 
     try { 
      return String.valueOf(getSharedPreferences().getInt(getKey(), 0)); 
     } catch (Exception e) { 
      return getSharedPreferences().getString(getKey(), "0"); 
     } 
    } 

    @Override 
    public void setText(String text) { 
     try { 
      if (getSharedPreferences() != null) { 
       getSharedPreferences().edit().putInt(getKey(), Integer.parseInt(text)).commit(); 
      } 
     } catch (Exception e) { 
      // TODO: This catch stinks! 
     } 
    } 

    @Override 
    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { 
     getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); 
     getEditText().setSelectAllOnFocus(true); 

     if (restoreValue) { 
      getEditText().setText(getText()); 
     } else { 
      super.onSetInitialValue(restoreValue, defaultValue != null ? defaultValue : ""); 
     } 
    } 
} 

ध्यान दें कि यह कारण मैं नहीं गया इस मार्ग है EditTextPreference

android:inputType="number" 

को inputType विशेषता जोड़ने के लिए संभव है कि मैं चाहता था कि मेरी वरीयता Integer के रूप में संग्रहीत हो और String

+2

दुर्भाग्य से 'android.support.v7.preference.EditTextPreference' में' getEditText() 'विधि नहीं है। – ivkil

+0

@ivkil क्या आपको एक विशेष कारण है 'android.support.v7.preference.EditTextPreference'? मैं पूछता हूं क्योंकि 'android.preference.EditTextPreference' एपीआई स्तर 1 के बाद से मौजूद है। –

+1

हाँ। मेरे ऐप के लिए सेटिंग्स प्रदान करने के लिए, मैं 'वरीयता फ्रेगमेंट कॉम्पेट' का उपयोग कर रहा हूं। – ivkil

संबंधित मुद्दे