2016-01-20 9 views

Antwort

3

Jetzt kann man Android-Support-Preference-V7-Fix Bibliothek verwenden.
Fixed EditTextPreference leitet die XML-Attribute (wie inputType) an die EditText weiter, genau wie die ursprüngliche Präferenz.

+0

Diese Bibliothek ist Android.support.v7.preference weit überlegen. Mehr Feature-Rich und einfacher zu Theme. –

2

Edit: Die bisherigen Antworten unten android.preference.EditTextPreference auf dem Lager gebaut wurden und leider funktioniert nicht für die android.support.v7.preference.EditTextPreference.

Im android.preference.EditTextPreference der EditText Steuerung programmatisch erstellt und die AttributeSet vom Preference wird an sie übergeben.

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); 
} 

Weiß erlaubt uns, die inputType auf der Preference selbst zu setzen und sie haben durchlaufen zum EditText. Leider scheint die android.support.v7.preference.EditTextPreference die EditText im Layout

this issue auf die Arbeit dieser Ideen Siehe erstellen um:

Nur, damit Sie wollten wissen, dass Subklassen EditTextPreferenceDialogFragment und zwingende onAddEditTextToDialogView sowie zwingende PreferenceFragmentCompat # onDisplayPreferenceDialog zu zeige, dass die Unterklasse nach Bedarf funktioniert, danke für die Hilfe.


Ihre eigene Klasse erstellen, die die EditTextPreference und legen Sie es dort erstreckt.

Hier ist meine EditIntegerPreference Klasse:

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 : ""); 
     } 
    } 
} 

Beachten Sie, dass es möglich ist, das inputType Attribut auf den der EditTextPreference

android:inputType="number" 

Der Grund, warum ich diesen Weg gehen nicht hinzuzufügen ist dass ich wollte, dass meine Präferenz als Integer und nicht als String

gespeichert wird
+2

Leider 'android.support.v7.preference.EditTextPreference' enthält nicht' getEditText() 'Methode. – ivkil

+0

@ivkil gibt es einen bestimmten Grund benötigen Sie 'android.support.v7.preference.EditTextPreference'? Ich frage, weil 'android.preference.EditTextPreference' existiert seit API-Ebene 1. –

+1

Yep. Um Einstellungen für meine App bereitzustellen, verwende ich 'PreferenceFragmentCompat'. – ivkil

Verwandte Themen