Kaynağa Gözat

MaterialEditTextPreference now supports dialogMessage.

Aidan Follestad 10 yıl önce
ebeveyn
işleme
7e4ac46a41

+ 21 - 22
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialEditTextPreference.java

@@ -6,8 +6,7 @@ import android.graphics.PorterDuff;
 import android.os.Build.VERSION;
 import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.support.annotation.NonNull;
+import android.preference.DialogPreference;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -15,7 +14,7 @@ import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.EditText;
-import android.widget.FrameLayout;
+import android.widget.TextView;
 
 import com.afollestad.materialdialogs.MaterialDialog;
 import com.afollestad.materialdialogs.MaterialDialog.Builder;
@@ -26,21 +25,28 @@ import com.afollestad.materialdialogs.util.DialogUtils;
 /**
  * @author Marc Holder Kluver (marchold), Mark Sutherland (msutherland4807)
  */
-public class MaterialEditTextPreference extends EditTextPreference {
+public class MaterialEditTextPreference extends DialogPreference {
 
     private int mColor = 0;
     private EditText mEditText;
 
-    @Override
     public EditText getEditText() {
         return mEditText;
     }
 
+    public void setText(String text) {
+        final boolean wasBlocking = shouldDisableDependents();
+        persistString(text);
+        final boolean isBlocking = shouldDisableDependents();
+        if (isBlocking != wasBlocking) {
+            notifyDependencyChange(isBlocking);
+        }
+    }
+
     public MaterialEditTextPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
         if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP)
             mColor = DialogUtils.resolveColor(context, R.attr.colorAccent);
-        mEditText = super.getEditText();
     }
 
     public MaterialEditTextPreference(Context context) {
@@ -65,8 +71,15 @@ public class MaterialEditTextPreference extends EditTextPreference {
                 .content(getDialogMessage());
 
         // Create our layout, put the EditText inside, then add to dialog
-        FrameLayout layout = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.md_input_dialog, null);
-        onBindDialogView(layout);
+        ViewGroup layout = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.md_input_dialog, null);
+        mEditText = (EditText) layout.findViewById(android.R.id.edit);
+        TextView message = (TextView) layout.findViewById(android.R.id.message);
+        if (getDialogMessage() != null && getDialogMessage().toString().length() > 0) {
+            message.setVisibility(View.VISIBLE);
+            message.setText(getDialogMessage());
+        } else {
+            message.setVisibility(View.GONE);
+        }
         mBuilder.customView(layout, false);
 
         // Create the dialog
@@ -81,20 +94,6 @@ public class MaterialEditTextPreference extends EditTextPreference {
         mDialog.show();
     }
 
-    /**
-     * Adds the EditText widget of this preference to the dialog's view.
-     * <p/>
-     * Overridden from EditTextPreference so we don't go searching for internal
-     * Android layouts
-     */
-    @Override
-    protected void onAddEditTextToDialogView(@NonNull View dialogView, @NonNull EditText editText) {
-        ViewGroup viewGroup = (ViewGroup) dialogView;
-        viewGroup.removeAllViews();
-        viewGroup.addView(editText, ViewGroup.LayoutParams.MATCH_PARENT,
-                ViewGroup.LayoutParams.WRAP_CONTENT);
-    }
-
     /**
      * Callback listener for the MaterialDialog. Positive button checks with
      * OnPreferenceChangeListener before committing user entered text

+ 15 - 3
library/src/main/res/layout/md_input_dialog.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -7,11 +8,22 @@
     android:paddingLeft="@dimen/md_dialog_frame_margin"
     android:paddingRight="@dimen/md_dialog_frame_margin">
 
+    <TextView
+        android:id="@android:id/message"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textSize="16sp"
+        android:paddingLeft="4dp"
+        android:paddingRight="4dp"
+        tools:text="Dialog message"
+        android:paddingBottom="12dp" />
+
     <EditText
         android:id="@android:id/edit"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:inputType="text"
-        android:singleLine="true" />
+        android:singleLine="true"
+        tools:hint="Input area" />
 
-</FrameLayout>
+</LinearLayout>

+ 1 - 0
sample/src/main/res/values/strings.xml

@@ -135,5 +135,6 @@
     <string name="progress_dialog">Progress Dialog</string>
     <string name="please_wait">Please wait…</string>
     <string name="done">Done!</string>
+    <string name="optional_dialog_message">This is an optional dialog message.</string>
 
 </resources>

+ 1 - 0
sample/src/main/res/xml/preferences.xml

@@ -16,6 +16,7 @@
         android:summary="@string/edittext_pref_desc"
         android:inputType="textPersonName"
         android:dialogTitle="@string/edittext_pref_dialogtitle"
+        android:dialogMessage="@string/optional_dialog_message"
         android:persistent="true"
         android:layout="@layout/preference_custom" />