2012-07-01 21 views
2

我希望把Android上edittextpreference一個按鈕。 創建自定義editextpreference:EditTextPreference使用按鈕

public class EditTextPreferenceWithButton extends EditTextPreference { 

    private Context context; 

    public EditTextPreferenceWithButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     this.context=context; 
     } 

     public EditTextPreferenceWithButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context=context; 
     } 

     public EditTextPreferenceWithButton(Context context) { 
     super(context); 
     this.context=context; 
     } 



     @Override 
     protected void onBindDialogView(View view) { 
      super.onBindDialogView(view); 



      view.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 



      final EditText editText = (EditText)view.findViewById(android.R.id.edit); 
      ViewGroup vg = (ViewGroup)editText.getParent(); 

      Button button = new Button(context); 


      vg.addView(button,ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 


     } 
} 

這樣的按鈕顯示編輯文本的下方,但我想它是未來像這樣的EditText:

|的EditText | |按鈕|

請幫幫我! 謝謝

+0

你想要一個帶右邊的按鈕的edittext,你將它添加到對話框中? –

+0

是的。在點擊edittextpreference行時顯示的對話框中。 – user1437101

+0

看到我的答案,那是你在找什麼? –

回答

5

我會創造的DialogPreference一個子類。

class EditTextDialogPreference extends DialogPreference { 

    //Layout Fields 
    private final LinearLayout layout = new LinearLayout(this.getContext()); 
    private final EditText editText = new EditText(this.getContext()); 
    private final Button button = new Button(this.getContext()); 


    //Called when addPreferencesFromResource() is called. Initializes basic paramaters 
    public EditTextDialogPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setPersistent(true); 
     button.setText("Button"); 
     layout.setOrientation(LinearLayout.HORIZONTAL); 
    } 

    //Create the Dialog view 
    @Override 
    protected View onCreateDialogView() { 
     layout.addView(editText); 
     layout.addView(button); 
     return parentLayout; 
    } 

    //Attach persisted values to Dialog 
    @Override 
    protected void onBindDialogView(View view) { 
     super.onBindDialogView(view); 
     editText.setText(getPersistedString("EditText"), TextView.BufferType.NORMAL); 
    } 

    //persist values and disassemble views 
    @Override 
    protected void onDialogClosed(boolean positiveresult) { 
     super.onDialogClosed(positiveresult); 
     if (positiveresult && shouldPersist()) { 
      persistString(editText.getText().toString()); 
     } 

     ((ViewGroup) editText.getParent()).removeView(editText); 
     ((ViewGroup) button.getParent()).removeView(button); 
     ((ViewGroup) layout.getParent()).removeView(layout); 

     notifyChanged(); 
    } 
} 

我假設你要堅持在EditText的價值,我要離開了按鈕的作用取決於你。有關入和伸出DialogPreference的的更多信息,請this post

爲了拿到鑰匙進入SharedPreferences,把你的XML如下:

<com.yourpackage.EditTextDialogPreference 
    android:key="Your Key" 
    android:persistent="true"/> 
+0

謝謝你的幫助! – user1437101

+0

@user作爲K_Anas說,當你的問題就解決了,記得要標記一個答案接受。這對於後來出現類似問題的其他人來說確實很有幫助。 – gobernador

+0

太感謝你了,一切工作正常,但當我打電話addPreferencesFromResource(R.xml.preferences)它不persit值。 – user1437101

0

這裏的是基於@gobernador回答一個更具體的類,但使用RelativeLayout

class EditTextDialogPreference extends DialogPreference { 

    //Layout Fields 
    private final RelativeLayout layout = new RelativeLayout(this.getContext()); 
    private final EditText editText = new EditText(this.getContext()); 
    private final Button button = new Button(this.getContext()); 


    //Called when addPreferencesFromResource() is called. Initializes basic paramaters 
    public EditTextDialogPreference(final Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setPersistent(true); 
     button.setText("Button"); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      //button action 
      } 
     }); 
     editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); 
    } 

    //Create the Dialog view 
    @Override 
    protected View onCreateDialogView() { 
     layout.addView(editText); 
     layout.addView(button); 

     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams(); 
     params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     return layout; 
    } 

    //Attach persisted values to Dialog 
    @Override 
    protected void onBindDialogView(View view) { 
     super.onBindDialogView(view); 
     editText.setText(getPersistedString("EditText"), TextView.BufferType.NORMAL); 
    } 

    //persist values and disassemble views 
    @Override 
    protected void onDialogClosed(boolean positiveresult) { 
     super.onDialogClosed(positiveresult); 
     if (positiveresult && shouldPersist()) { 
      String value = editText.getText().toString(); 
      if (callChangeListener(value)) 
       persistString(value); 
     } 

     ((ViewGroup) editText.getParent()).removeView(editText); 
     ((ViewGroup) button.getParent()).removeView(button); 
     ((ViewGroup) layout.getParent()).removeView(layout); 

     notifyChanged(); 
    } 

    public void setValue(String value) { 
     editText.setText(value); 
    } 
}