EditTextPreference のダイアログのレイアウトが気に入らない。
↑
このように、メッセージ下にマージンが大きく存在する。
無駄に大きいダイアログでなく、メッセージ文字ももう少し大きいのが欲しい。
DialogPreference を継承して、代わりの EditTextPreference を作る。
この中で defaultValue を参照する正しい方法がわからない。
無理やり参照してみる。
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.preference.DialogPreference;
import android.preference.PreferenceManager;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* CustomEditTextPreference
*/
public class CustomEditTextPreference extends DialogPreference{
private Map<String,String> mattrMap;
private EditText mEditText;
private String mDefaultValue;
public CustomEditTextPreference(Context context,AttributeSet attrs){
super(context, attrs);
mattrMap = new HashMap<String,String>();
int attrCount = attrs.getAttributeCount();
for(int i=0;i < attrCount;i++){
mattrMap.put(attrs.getAttributeName(i), attrs.getAttributeValue(i));
}
mDefaultValue = "";
if (mattrMap.containsKey("defaultValue")){
mDefaultValue = mattrMap.get("defaultValue");
if (mDefaultValue.matches("^@[0-9a-fA-F]+$")){
mDefaultValue = context.getString(Integer.parseInt(mDefaultValue.substring(1)));
}
}
setSummary(PreferenceManager.getDefaultSharedPreferences(context).getString(mattrMap.get("key"), mDefaultValue));
}
@Override
protected View onCreateDialogView(){
LinearLayout layout = new LinearLayout(getContext());
layout.setOrientation(LinearLayout.VERTICAL);
if (mattrMap.containsKey("dialogMessage")){
TextView textview = new TextView(getContext());
textview.setText(mattrMap.get("dialogMessage"));
textview.setTextAppearance(getContext(), android.R.style.TextAppearance_Medium);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
// left, top, right, bottom
params.setMargins(20,20,10,10);
textview.setLayoutParams(params);
layout.addView(textview);
}
mEditText = new EditText(getContext());
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
// left, top, right, bottom
params.setMargins(10,10,10,14);
mEditText.setLayoutParams(params);
mEditText.setText(getPersistedString(mDefaultValue));
layout.addView(mEditText);
return layout;
}
@Override
protected void onBindDialogView(View view){
super.onBindDialogView(view);
mEditText.setSelection(mEditText.getText().length());
mEditText.requestFocus();
}
@Override
protected void onDialogClosed(boolean positiveResult){
if (positiveResult){
String value = mEditText.getText().toString();
if (value.length()==0){
persistString(mDefaultValue);
setSummary(mDefaultValue);
}else{
persistString(value);
setSummary(value);
}
}
}
}