Sfoglia il codice sorgente

Merge pull request #259 from msutherland4807/master

MaterialEditTextPreference bugs
Aidan Follestad 10 anni fa
parent
commit
3bbe5d281b

+ 63 - 43
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialEditTextPreference.java

@@ -1,13 +1,20 @@
 package com.afollestad.materialdialogs.prefs;
 
 import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.PorterDuff;
+import android.os.Build;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.preference.EditTextPreference;
 import android.util.AttributeSet;
-import android.view.ViewGroup;
+import android.util.TypedValue;
 import android.widget.EditText;
+import android.widget.FrameLayout;
 
 import com.afollestad.materialdialogs.MaterialDialog;
+import com.afollestad.materialdialogs.MaterialDialog.ButtonCallback;
 import com.afollestad.materialdialogs.R;
 
 /**
@@ -15,46 +22,59 @@ import com.afollestad.materialdialogs.R;
  */
 public class MaterialEditTextPreference extends EditTextPreference {
 
-    private EditText editText;
-
-    public MaterialEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    public MaterialEditTextPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public MaterialEditTextPreference(Context context) {
-        super(context);
-    }
-
-    @Override
-    protected void showDialog(Bundle state) {
-        MaterialDialog.Builder mBuilder = new MaterialDialog.Builder(getContext())
-                .title(getTitle())
-                .icon(getDialogIcon())
-                .positiveText(getPositiveButtonText())
-                .negativeText(getNegativeButtonText())
-                .customView(R.layout.md_input_dialog, false)
-                .callback(new MaterialDialog.ButtonCallback() {
-                    @Override
-                    public void onPositive(MaterialDialog dialog) {
-                        super.onPositive(dialog);
-                        String value = editText.getText().toString();
-                        if (callChangeListener(value) && isPersistent())
-                            setText(value);
-                    }
-                });
-
-        mBuilder.content(getDialogMessage());
-        MaterialDialog dialog = mBuilder.build();
-        editText = (EditText) ((ViewGroup) dialog.getCustomView()).getChildAt(0);
-        editText.setText(getText());
-        dialog.show();
-    }
-
-    public final EditText getEditText() {
-        return editText;
-    }
+	public MaterialEditTextPreference(Context context, AttributeSet attrs) {
+		super(context, attrs);
+		TypedValue value = new TypedValue();
+		context.getTheme().resolveAttribute(R.attr.colorAccent, value, true);
+		color = value.data;
+	}
+
+	public MaterialEditTextPreference(Context context) {
+		this(context, null);
+	}
+
+	private MaterialDialog dialog;
+	private int color = 0;
+
+	@Override
+	protected void showDialog(Bundle state) {
+
+		// Build our dialog for the first time
+		if (dialog == null)
+		{
+			if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP)
+				getEditText().getBackground().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
+
+			dialog = new MaterialDialog.Builder(getContext())
+					.title(getTitle())
+					.icon(getDialogIcon())
+					.positiveText(getPositiveButtonText())
+					.negativeText(getNegativeButtonText())
+					.customView(R.layout.md_input_dialog, false)
+					.callback(callback)
+					.content(getDialogMessage()).build();
+
+			// So we maintain margins
+			FrameLayout layout = (FrameLayout) dialog.getCustomView();
+			if (layout != null)
+			{
+				layout.removeAllViews();
+				layout.addView(getEditText());
+			}
+		}
+
+		// Built it, now show it
+		dialog.show();
+	}
+
+	private final ButtonCallback callback = new ButtonCallback()
+	{
+		@Override
+		public void onPositive(MaterialDialog dialog)
+		{
+			String value = getEditText().getText().toString();
+			if (callChangeListener(value) && isPersistent())
+				setText(value);
+		}
+	};
 }