android - 带按钮的 EditTextPreference

标签 android android-edittext

我想在 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);


        }
}

以这种方式,按钮显示在编辑文本下方,但我希望它在编辑文本旁边,如下所示:

|编辑文本| |按钮|

请帮帮我! 谢谢

最佳答案

我会创建一个 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 中,而我将按钮的操作留给您。参见 this post有关扩展 DialogPreference 的更多信息。

为了将 key 放入 SharedPreferences,请将以下内容放入您的 XML 中:

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

关于android - 带按钮的 EditTextPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286544/

相关文章:

android - Gradle 创建多项目 Jar

android:当用户触摸 fragment 外部时,如何关闭 fragment ?

android - 如何在更改 EditText 文本时更改 TextView 文本?

java - 从 android 中的 EditText 字段设置对象值

android - 在 edittext 中移动可绘制对象的位置

安卓短信设置唯一ID

android - Widget.AppCompat.Button colorButtonNormal 显示灰色

android - WebView可以用于HTML解析吗?

android - 底部没有线条的EditText

android - 如何禁用 EditText 中的 SwiftKey(第三方键盘)行为?