EditTextPreference使用按钮(EditTextPreference With But

2019-09-18 22:58发布

我希望把Android上edittextpreference一个按钮。 我创建一个自定义editextpreference:

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 | |按钮|

请帮我! 谢谢

Answer 1:

我想创建的子类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

为了拿到钥匙进入SharedPreferences ,把你的XML如下:

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


Answer 2:

下面是基于@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);
    }
}


文章来源: EditTextPreference With Button