2016-01-20 24 views
5

android.support.v7.preference.EditTextPreference için giriş yöntemi türünü belirtmenin herhangi bir yolu var mı?Android destek EditTextPreference giriş türü

+1

[İlgili Android sorunu] (https://code.google.com/p/android/issues/detail?id=185164), görünürde düzeltme yok. – aha

cevap

3

Artık Android-Support-Preference-V7-Fix kütüphanesini kullanabilirsiniz.
Sabit EditTextPreference, XML özniteliklerini (inputType gibi) EditText yerine, orijinal tercihte olduğu gibi iletir.

+0

Bu kütüphane, android.support.v7.preference adresinden çok daha üstündür. Daha fazla özellik zengin ve Tema için daha kolay. –

2

Düzenleme: Stokta android.preference.EditTextPreference üzerine inşa edildi ve ne yazık ki android.support.v7.preference.EditTextPreference için çalışmaz önceki cevaplar aşağıda. android.preference.EditTextPreferenceEditText kontrolünde

programlı oluşturulur ve Preference den AttributeSet kendisine geçirilir.

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

Beyaz bize Preference kendisinde inputType ayarlamak ve EditText geçişine sahip verir. Maalesef android.support.v7.preference.EditTextPreference bu çevrede çalışma hakkında Layout

yılında EditText fikirler için this issue bakınız oluşturmak için görünür:

Sadece bilmeni istedim EditTextPreferenceDialogFragment sınıflara ve onAddEditTextToDialogView geçersiz kılma yanı sıra PreferenceFragmentCompat # onDisplayPreferenceDialog basan Alt sınıfın gerektiği gibi çalıştığını göster, yardım için teşekkürler.


EditTextPreference uzanır kendi sınıf oluşturun ve orada ayarlayın. o EditTextPreference

android:inputType="number" 

için bu rota gitmedi nedeni inputType öznitelik eklemek mümkün olduğunu

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

Not:

İşte benim EditIntegerPreference sınıf var Tercihimi Integer olarak saklamak istedim ve String

+2

Ne yazık ki 'android.support.v7.preference.EditTextPreference'' getEditText() 'yöntemini içermiyor. – ivkil

+0

@ivkil 'android.support.v7.preference.EditTextPreference'' için ihtiyacınız olan belirli bir neden var mı? API level 1'den beri android.preference.EditTextPreference' var olduğundan dolayı soruyorum. –

+1

Yep. Uygulamam için ayarları sağlamak için 'PreferenceFragmentCompat' kullanıyorum. – ivkil

İlgili konular