Przeglądaj źródła

Release 0.6.2.4. Lots of cleanup for new Material preference stuff. Added them to the README.

Aidan Follestad 10 lat temu
rodzic
commit
9bc17ad6d1

+ 10 - 1
README.md

@@ -23,7 +23,7 @@ Easily reference the library in your Android projects using this dependency in y
 
 ```Gradle
 dependencies {
-    compile 'com.afollestad:material-dialogs:0.6.2.3'
+    compile 'com.afollestad:material-dialogs:0.6.2.4'
 }
 ```
 
@@ -507,6 +507,15 @@ new MaterialDialog.Builder(this)
 
 ---
 
+### Preference Dialogs
+
+Android's `EditTextPreference` and `ListPreference` allow you to associate a preference activity's settings
+with user input that's received through typing or selection. Material Dialogs includes a `MaterialEditTextPreference`
+and `MaterialListPreference` class that can be used in your preferences XML to automatically use Material-themed
+dialogs. See the sample project for details.
+
+---
+
 ### Misc
 
 If you need to access a View in the custom view set to a MaterialDialog, you can use `getCustomView()` of

+ 2 - 2
library/build.gradle

@@ -9,7 +9,7 @@ android {
         minSdkVersion 8
         targetSdkVersion 21
         versionCode 1
-        versionName "0.6.2.3"
+        versionName "0.6.2.4"
     }
     lintOptions {
         abortOnError false
@@ -27,7 +27,7 @@ publish {
     userOrg = 'drummer-aidan'
     groupId = 'com.afollestad'
     artifactId = 'material-dialogs'
-    version = '0.6.2.3'
+    version = '0.6.2.4'
     description = 'A library for implementing Material design styled dialogs across all versions of Android.'
     website = 'https://github.com/afollestad/material-dialogs'
     issueTracker = "${website}/issues"

+ 39 - 38
library/src/main/java/com/afollestad/materialdialogs/MaterialEditTextPreference.java

@@ -6,20 +6,22 @@ import android.preference.EditTextPreference;
 import android.util.AttributeSet;
 import android.util.TypedValue;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.EditText;
 import android.widget.FrameLayout;
 
 /**
- *  @author Marc Holder Kluver (marchold)
+ * @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);
+        editText = new EditText(context, attrs);
     }
 
     public MaterialEditTextPreference(Context context, AttributeSet attrs) {
@@ -33,54 +35,53 @@ public class MaterialEditTextPreference extends EditTextPreference {
     @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);
+        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);
+        if (editText.getParent() != null)
+            ((ViewGroup) editText.getParent()).removeView(editText);
         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);
-            }
-
-
-        });
+        MaterialDialog.Builder mBuilder = new MaterialDialog.Builder(context)
+                .title(getTitle())
+                .icon(getDialogIcon())
+                .positiveText(android.R.string.ok)
+                .customView(layout, false)
+                .negativeText(getNegativeButtonText())
+                .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.customView(contentView, false);
+        } else {
             mBuilder.content(getDialogMessage());
+        }
 
         mBuilder.show();
     }
 
-
-
     public EditText getEditText() {
         return editText;
     }
-
-}
+}

+ 26 - 24
library/src/main/java/com/afollestad/materialdialogs/MaterialListPreference.java

@@ -9,8 +9,11 @@ import android.view.View;
 
 /**
  * Adapted from http://stackoverflow.com/a/27429926/1247248
+ *
+ * @author Marc Holder Kluver (marchold)
  */
 public class MaterialListPreference extends ListPreference {
+
     private MaterialDialog.Builder mBuilder;
     private Context context;
 
@@ -26,35 +29,34 @@ public class MaterialListPreference extends ListPreference {
 
     @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);
-                }
-            }
-        });
+        mBuilder = new MaterialDialog.Builder(context)
+                .title(getTitle())
+                .icon(getDialogIcon())
+                .positiveText(getPositiveButtonText())
+                .negativeText(getNegativeButtonText())
+                .items(getEntries())
+                .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.customView(contentView, false);
+        } else {
             mBuilder.content(getDialogMessage());
+        }
 
         mBuilder.show();
     }
-
-}
+}

+ 2 - 2
sample/build.gradle

@@ -8,8 +8,8 @@ android {
         applicationId "com.afollestad.materialdialogssample"
         minSdkVersion 14
         targetSdkVersion 21
-        versionCode 75
-        versionName "0.6.2.3"
+        versionCode 76
+        versionName "0.6.2.4"
     }
     lintOptions {
         abortOnError false

+ 2 - 3
sample/src/main/AndroidManifest.xml

@@ -20,9 +20,8 @@
         </activity>
 
         <activity
-            android:name=".MaterialPreferenceActivity"
-            android:label="@string/title_activity_preference" >
-        </activity>
+            android:name=".PreferenceActivity"
+            android:label="@string/preference_dialogs" />
 
     </application>
 

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

@@ -177,7 +177,7 @@ public class MainActivity extends ActionBarActivity implements FolderSelectorDia
         findViewById(R.id.preference_dialogs).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                startActivity(new Intent(getApplicationContext(),MaterialPreferenceActivity.class));
+                startActivity(new Intent(getApplicationContext(),PreferenceActivity.class));
             }
         });
     }

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

@@ -1,13 +0,0 @@
-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);
-    }
-}

+ 34 - 0
sample/src/main/java/com/afollestad/materialdialogssample/PreferenceActivity.java

@@ -0,0 +1,34 @@
+package com.afollestad.materialdialogssample;
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+import android.support.v7.app.ActionBarActivity;
+import android.view.MenuItem;
+
+public class PreferenceActivity extends ActionBarActivity {
+
+    public static class SettingsFragment extends PreferenceFragment {
+        @Override
+        public void onCreate(Bundle savedInstanceState) {
+            super.onCreate(savedInstanceState);
+            addPreferencesFromResource(R.xml.preferences);
+        }
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.preference_activity_custom);
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            onBackPressed();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+}

+ 1 - 1
sample/src/main/res/layout/activity_main.xml

@@ -146,7 +146,7 @@
             android:id="@+id/preference_dialogs"
             android:layout_width="match_parent"
             android:layout_height="56dp"
-            android:text="@string/Preference_Dialog"
+            android:text="@string/preference_dialogs"
             android:layout_marginTop="@dimen/sample_button_spacing" />
 
     </LinearLayout>

+ 5 - 0
sample/src/main/res/layout/preference_activity_custom.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/content_frame"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" />

+ 60 - 0
sample/src/main/res/layout/preference_custom.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingEnd="?android:attr/scrollbarSize"
+    android:paddingRight="?android:attr/scrollbarSize"
+    tools:ignore="RtlSymmetry,UnusedAttribute"
+    android:baselineAligned="false">
+
+    <RelativeLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="12dip"
+        android:layout_marginEnd="6dip"
+        android:layout_marginLeft="16dip"
+        android:layout_marginRight="6dip"
+        android:layout_marginStart="16dip"
+        android:layout_marginTop="12dip"
+        android:layout_weight="1">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal"
+            android:fontFamily="sans-serif"
+            android:singleLine="true"
+            android:textColor="?android:textColorPrimary"
+            android:textSize="16sp"
+            tools:text="Title" />
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignLeft="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:layout_below="@android:id/title"
+            android:layout_marginTop="2dp"
+            android:fontFamily="sans-serif"
+            android:maxLines="4"
+            android:textColor="?android:textColorSecondary"
+            android:textSize="14sp"
+            tools:text="Summary" />
+
+    </RelativeLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical"
+        android:orientation="vertical" />
+
+</LinearLayout>

+ 6 - 2
sample/src/main/res/values/strings.xml

@@ -125,7 +125,11 @@
         <item>Wyoming</item>
     </string-array>
 
-    <string name="title_activity_preference">PreferenceActivity</string>
-    <string name="Preference_Dialog">Preference Dialog</string>
+    <string name="preference_dialogs">Preference Dialogs</string>
+    <string name="list_pref_title">Material List Preference</string>
+    <string name="list_pref_desc">This is an example of a list preference that automatically uses Material Dialogs to show the list dialog.</string>
+    <string name="edittext_pref_title">Material EditText Preference</string>
+    <string name="edittext_pref_desc">This is an example of an EditText preference that automatically uses Material Dialogs to show the input dialog.</string>
+    <string name="edittext_pref_dialogtitle">Enter a Name</string>
 
 </resources>

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

@@ -1,16 +0,0 @@
-<?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>

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

@@ -0,0 +1,22 @@
+<?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="@string/list_pref_title"
+        android:summary="@string/list_pref_desc"
+        android:persistent="false"
+        android:layout="@layout/preference_custom" />
+
+    <com.afollestad.materialdialogs.MaterialEditTextPreference
+        android:key="unused_key2"
+        android:title="@string/edittext_pref_title"
+        android:summary="@string/edittext_pref_desc"
+        android:inputType="textPersonName"
+        android:dialogTitle="@string/edittext_pref_dialogtitle"
+        android:persistent="false"
+        android:layout="@layout/preference_custom" />
+
+</PreferenceScreen>