2013-02-23 1 views
0

inputtype 암호를 요약를 업데이트 edittextpreference 방지는 다음과 같이 요약을 갱신하지에 논리적으로 처리 한 :나는 환경 summary.I에 <code>edittextpreference</code>에 입력 한 암호를 볼 수의 사용자를 방지 할

if (!preference.getKey().equals(EMAIL_PWD_KEY) 
         && !preference.getKey().equals(PASSCODE_KEY)) 
    { 
     sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,PreferenceManager.getDefaultSharedPreferences(preference.getContext()) 
                            .getString(preference.getKey(), 
                              "")); 
    } 

그러나 때 'OK'버튼을 클릭하면 요약이 업데이트됩니다. 업데이트를 방지하기위한 아이디어가 있습니까?

답변

1
내가 EditTextPreference를 확장 EditTextPreferenceWithSummary라는 클래스를 구현하고 몇 가지 방법을 재정의 할 수있는 방법을 발견

...

public class EditTextPreferenceWithSummary extends EditTextPreference { 

    public EditTextPreferenceWithSummary(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public EditTextPreferenceWithSummary(Context context) { 
     super(context); 
     init(); 
    } 

    @Override 
    protected View onCreateView(ViewGroup parent) { 
     updateSummary(); 
     return super.onCreateView(parent); 
    } 

    public void updateSummary() 
    { 
     String value = ""; 
     int variation = (this.getEditText().getInputType() & InputType.TYPE_MASK_VARIATION); 
     Boolean isPassword = ((variation == InputType.TYPE_NUMBER_VARIATION_PASSWORD) 
          ||(variation == InputType.TYPE_TEXT_VARIATION_PASSWORD) 
          ||(variation == InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD)); 

     if (isPassword) 
     { 
      value = this.getText().replaceAll(".", "*"); 
     } 
     else 
     { 
      value = this.getText(); 
     } 
     this.setSummary(value); 
    } 

    private void init() { 
     setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       EditTextPreferenceWithSummary pref = (EditTextPreferenceWithSummary) preference; 
       pref.updateSummary(); 
       return true; 
      } 
     }); 
    } 
} 

그리고 내 취향 XML 파일은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

    <PreferenceCategory 
      android:title="@string/pref_header_database"> 
      <com.designit.api.preferences.EditTextPreferenceWithSummary 
        android:title="@string/field_database_server_ip" 
        android:defaultValue="" 
        android:summary="Set the IP adress of the server" 
        android:key="server_ip_address" /> 
      <com.designit.api.preferences.EditTextPreferenceWithSummary 
        android:title="@string/field_database_server_port" 
        android:defaultValue="" 
        android:inputType="number" 
        android:summary="Set the port of the server" 
        android:key="server_port" /> 
      <com.designit.api.preferences.EditTextPreferenceWithSummary 
        android:title="@string/field_database_name" 
        android:defaultValue="" 
        android:summary="Set the database name" 
        android:key="database_name" /> 
      <com.designit.api.preferences.EditTextPreferenceWithSummary 
        android:title="@string/field_database_user" 
        android:defaultValue="" 
        android:summary="Set the database user" 
        android:key="database_user" /> 
      <com.designit.api.preferences.EditTextPreferenceWithSummary 
        android:title="@string/field_database_password" 
        android:defaultValue="" 
        android:summary="Set the database password" 
        android:key="database_passwd" 
        android:inputType="textPassword"/> 
    </PreferenceCategory> 

희망이 도움이됩니다. 건배.