我希望把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 | |按钮|
请帮我! 谢谢
我想创建的子类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"/>
下面是基于@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);
}
}