1
0
Эх сурвалжийг харах

Merge pull request #246 from marchold/master

Added edit text preference and list preference classes and sample code
Aidan Follestad 10 жил өмнө
parent
commit
71495b526d

+ 86 - 0
library/src/main/java/com/afollestad/materialdialogs/MaterialEditTextPreference.java

@@ -0,0 +1,86 @@
+package com.afollestad.materialdialogs;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.preference.EditTextPreference;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+
+/**
+ *  @author Marc Holder Kluver (marchold)
+ */
+public class MaterialEditTextPreference extends EditTextPreference {
+    private final Context context;
+    private EditText editText;
+
+    public MaterialEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        this.context = context;
+        editText = new EditText(context,attrs);
+    }
+
+    public MaterialEditTextPreference(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public MaterialEditTextPreference(Context context) {
+        this(context, null, 0);
+    }
+
+    @Override
+    protected void showDialog(Bundle state) {
+        final FrameLayout layout = new FrameLayout(context);
+        int margin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getContext().getResources().getDisplayMetrics());
+        layout.setPadding(margin,0,margin,0);
+        editText.setText(getText());
+        editText.setId(android.R.id.edit);
+        layout.addView(editText);
+        MaterialDialog.Builder mBuilder = new MaterialDialog.Builder(context);
+        mBuilder.title(getTitle());
+        mBuilder.icon(getDialogIcon());
+        mBuilder.positiveText(android.R.string.ok);
+        mBuilder.customView(layout,false);
+        mBuilder.negativeText(getNegativeButtonText());
+        mBuilder.callback(new MaterialDialog.ButtonCallback() {
+            @Override
+            public void onPositive(MaterialDialog dialog) {
+                super.onPositive(dialog);
+                layout.removeView(editText);
+                String value = editText.getText().toString();
+                if (callChangeListener(value)) {
+                    setText(value);
+                }
+            }
+
+            public void onNegative(MaterialDialog dialog) {
+                layout.removeView(editText);
+            }
+
+            public void onNeutral(MaterialDialog dialog) {
+                layout.removeView(editText);
+            }
+
+
+        });
+
+        final View contentView = onCreateDialogView();
+        if (contentView != null) {
+            onBindDialogView(contentView);
+            mBuilder.customView(contentView);
+        }
+        else
+            mBuilder.content(getDialogMessage());
+
+        mBuilder.show();
+    }
+
+
+
+    public EditText getEditText() {
+        return editText;
+    }
+
+}

+ 60 - 0
library/src/main/java/com/afollestad/materialdialogs/MaterialListPreference.java

@@ -0,0 +1,60 @@
+package com.afollestad.materialdialogs;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * Adapted from http://stackoverflow.com/a/27429926/1247248
+ */
+public class MaterialListPreference extends ListPreference {
+    private MaterialDialog.Builder mBuilder;
+    private Context context;
+
+    public MaterialListPreference(Context context) {
+        super(context);
+        this.context = context;
+    }
+
+    public MaterialListPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        this.context = context;
+    }
+
+    @Override
+    protected void showDialog(Bundle state) {
+        mBuilder = new MaterialDialog.Builder(context);
+        mBuilder.title(getTitle());
+        mBuilder.icon(getDialogIcon());
+        mBuilder.positiveText(null);
+        mBuilder.negativeText(getNegativeButtonText());
+        mBuilder.items(getEntries());
+        mBuilder.itemsCallback(new MaterialDialog.ListCallback() {
+            @Override
+            public void onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
+                onClick(null, DialogInterface.BUTTON_POSITIVE);
+                dialog.dismiss();
+
+                if (which >= 0 && getEntryValues() != null) {
+                    String value = getEntryValues()[which].toString();
+                    if (callChangeListener(value))
+                        setValue(value);
+                }
+            }
+        });
+
+        final View contentView = onCreateDialogView();
+        if (contentView != null) {
+            onBindDialogView(contentView);
+            mBuilder.customView(contentView);
+        }
+        else
+            mBuilder.content(getDialogMessage());
+
+        mBuilder.show();
+    }
+
+}

+ 5 - 0
sample/src/main/AndroidManifest.xml

@@ -19,6 +19,11 @@
             </intent-filter>
         </activity>
 
+        <activity
+            android:name=".MaterialPreferenceActivity"
+            android:label="@string/title_activity_preference" >
+        </activity>
+
     </application>
 
 </manifest>

+ 8 - 0
sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.java

@@ -1,6 +1,7 @@
 package com.afollestad.materialdialogssample;
 
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Build;
@@ -172,6 +173,13 @@ public class MainActivity extends ActionBarActivity implements FolderSelectorDia
                 new FolderSelectorDialog().show(MainActivity.this);
             }
         });
+
+        findViewById(R.id.preference_dialogs).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivity(new Intent(getApplicationContext(),MaterialPreferenceActivity.class));
+            }
+        });
     }
 
     private void showBasicNoTitle() {

+ 13 - 0
sample/src/main/java/com/afollestad/materialdialogssample/MaterialPreferenceActivity.java

@@ -0,0 +1,13 @@
+package com.afollestad.materialdialogssample;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+
+public class MaterialPreferenceActivity extends PreferenceActivity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.preference);
+    }
+}

+ 7 - 0
sample/src/main/res/layout/activity_main.xml

@@ -142,6 +142,13 @@
             android:text="@string/folder_chooser"
             android:layout_marginTop="@dimen/sample_button_spacing" />
 
+        <Button
+            android:id="@+id/preference_dialogs"
+            android:layout_width="match_parent"
+            android:layout_height="56dp"
+            android:text="@string/Preference_Dialog"
+            android:layout_marginTop="@dimen/sample_button_spacing" />
+
     </LinearLayout>
 
 </ScrollView>

+ 7 - 0
sample/src/main/res/values/arrays.xml

@@ -25,4 +25,11 @@
         <item>#FF5722</item>
     </array>
 
+    <string-array name="preference_values">
+        <item>Twitter</item>
+        <item>Google</item>
+        <item>Instagram</item>
+        <item>Facebook</item>
+    </string-array>
+
 </resources>

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

@@ -125,4 +125,7 @@
         <item>Wyoming</item>
     </string-array>
 
+    <string name="title_activity_preference">PreferenceActivity</string>
+    <string name="Preference_Dialog">Preference Dialog</string>
+
 </resources>

+ 16 - 0
sample/src/main/res/xml/preference.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <com.afollestad.materialdialogs.MaterialListPreference
+        android:key="unused_key1"
+        android:entries="@array/preference_values"
+        android:entryValues="@array/preference_values"
+        android:title="Material List Preference" />
+
+    <com.afollestad.materialdialogs.MaterialEditTextPreference
+        android:key="unused_key2"
+        android:title="Material Edit Text Preference"
+        android:inputType="textPersonName"
+        android:dialogTitle="Enter a Name" />
+
+</PreferenceScreen>