ソースを参照

Made the selectors white on Jellybean/ICS rather than blue.

Aidan Follestad 10 年 前
コミット
2823122af3

+ 10 - 1
library/src/main/java/com/afollestad/materialdialogs/Utils.java → library/src/main/java/com/afollestad/materialdialogs/DialogUtils.java

@@ -7,7 +7,7 @@ import android.graphics.Color;
 /**
  * @author Aidan Follestad (afollestad)
  */
-public class Utils {
+public class DialogUtils {
 
     public static int adjustAlpha(int color, float factor) {
         int alpha = Math.round(Color.alpha(color) * factor);
@@ -25,4 +25,13 @@ public class Utils {
             a.recycle();
         }
     }
+
+    public static int resolveDrawable(Context context, int attr) {
+        TypedArray a = context.getTheme().obtainStyledAttributes(new int[]{attr});
+        try {
+            return a.getResourceId(0, 0);
+        } finally {
+            a.recycle();
+        }
+    }
 }

+ 15 - 7
library/src/main/java/com/afollestad/materialdialogs/MaterialDialog.java

@@ -94,10 +94,10 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         content.setMovementMethod(new LinkMovementMethod());
         content.setVisibility(View.VISIBLE);
         content.setTypeface(regularFont);
-        content.setTextColor(Utils.resolveColor(getContext(), R.attr.content_color));
+        content.setTextColor(DialogUtils.resolveColor(getContext(), R.attr.content_color));
         content.setLineSpacing(0f, builder.contentLineSpacingMultiplier);
         if (this.positiveColor == 0) {
-            content.setLinkTextColor(Utils.resolveColor(getContext(), R.attr.button_color));
+            content.setLinkTextColor(DialogUtils.resolveColor(getContext(), R.attr.button_color));
         } else {
             content.setLinkTextColor(this.positiveColor);
         }
@@ -138,7 +138,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
             if (builder.titleColor != -1) {
                 title.setTextColor(builder.titleColor);
             } else {
-                title.setTextColor(Utils.resolveColor(getContext(), R.attr.title_color));
+                title.setTextColor(DialogUtils.resolveColor(getContext(), R.attr.title_color));
             }
             if (builder.titleAlignment == Alignment.CENTER) {
                 title.setGravity(Gravity.CENTER_HORIZONTAL);
@@ -167,7 +167,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
             }
             if (canCustomViewScroll()) {
                 view.findViewById(R.id.customViewDivider).setVisibility(View.VISIBLE);
-                view.findViewById(R.id.customViewDivider).setBackgroundColor(Utils.resolveColor(getContext(), R.attr.divider_color));
+                view.findViewById(R.id.customViewDivider).setBackgroundColor(DialogUtils.resolveColor(getContext(), R.attr.divider_color));
                 setMargin(view.findViewById(R.id.buttonStackedFrame), -1, 0, -1, -1);
                 setMargin(view.findViewById(R.id.buttonDefaultFrame), -1, 0, -1, -1);
             } else {
@@ -212,7 +212,11 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         setMargin(list, -1, -1, 0, 0);
         LayoutInflater li = LayoutInflater.from(mContext);
 
-        final int itemColor = Utils.resolveColor(getContext(), R.attr.item_color);
+        if (listCallbackSingle == null && listCallbackMulti == null) {
+            setMargin(view.findViewById(R.id.customViewFrame), -1, dialogFrameMargin, -1, -1);
+        }
+
+        final int itemColor = DialogUtils.resolveColor(getContext(), R.attr.item_color);
         for (int index = 0; index < items.length; index++) {
             View il;
             if (listCallbackSingle != null) {
@@ -244,6 +248,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
             }
             il.setTag(index + ":" + items[index]);
             il.setOnClickListener(this);
+            il.setBackgroundResource(DialogUtils.resolveDrawable(getContext(), R.attr.list_selector));
             list.addView(il);
         }
     }
@@ -324,6 +329,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
             this.positiveText = mContext.getString(android.R.string.ok);
         positiveButton.setText(this.positiveText);
         positiveButton.setTextColor(getActionTextStateList(this.positiveColor));
+        positiveButton.setBackgroundResource(DialogUtils.resolveDrawable(getContext(), R.attr.list_selector));
         positiveButton.setTag(POSITIVE);
         positiveButton.setOnClickListener(this);
 
@@ -333,6 +339,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         if (this.neutralText != null) {
             neutralButton.setVisibility(View.VISIBLE);
             neutralButton.setTextColor(getActionTextStateList(this.neutralColor));
+            neutralButton.setBackgroundResource(DialogUtils.resolveDrawable(getContext(), R.attr.list_selector));
             neutralButton.setText(this.neutralText);
             neutralButton.setTag(NEUTRAL);
             neutralButton.setOnClickListener(this);
@@ -346,6 +353,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         if (this.negativeText != null) {
             negativeButton.setVisibility(View.VISIBLE);
             negativeButton.setTextColor(getActionTextStateList(this.negativeColor));
+            negativeButton.setBackgroundResource(DialogUtils.resolveDrawable(getContext(), R.attr.list_selector));
             negativeButton.setText(this.negativeText);
             negativeButton.setTag(NEGATIVE);
             negativeButton.setOnClickListener(this);
@@ -671,14 +679,14 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
 
 
     private ColorStateList getActionTextStateList(int newPrimaryColor) {
-        final int buttonColor = Utils.resolveColor(getContext(), R.attr.button_color);
+        final int buttonColor = DialogUtils.resolveColor(getContext(), R.attr.button_color);
         if (newPrimaryColor == 0) newPrimaryColor = buttonColor;
         int[][] states = new int[][]{
                 new int[]{-android.R.attr.state_enabled}, // disabled
                 new int[]{} // enabled
         };
         int[] colors = new int[]{
-                Utils.adjustAlpha(buttonColor, 0.6f),
+                DialogUtils.adjustAlpha(buttonColor, 0.6f),
                 newPrimaryColor
         };
         return new ColorStateList(states, colors);

+ 12 - 8
library/src/main/java/com/afollestad/materialdialogs/MaterialButton.java → library/src/main/java/com/afollestad/materialdialogs/views/MaterialButton.java

@@ -1,12 +1,13 @@
-package com.afollestad.materialdialogs;
+package com.afollestad.materialdialogs.views;
 
 import android.content.Context;
-import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.util.AttributeSet;
 import android.widget.TextView;
 
+import com.afollestad.materialdialogs.R;
+
 /**
  * @author Aidan Follestad (afollestad)
  */
@@ -29,12 +30,15 @@ public class MaterialButton extends TextView {
 
     private void init() {
         setClickable(true);
-        TypedArray a = getContext().getTheme().obtainStyledAttributes(new int[]{android.R.attr.selectableItemBackground});
-        try {
-            setBackgroundCompat(a.getDrawable(0));
-        } finally {
-            a.recycle();
-        }
+        setFocusable(true);
+        setFocusableInTouchMode(true);
+//        TypedArray a = getContext().getTheme().obtainStyledAttributes(new int[]{R.attr.list_selector});
+//        try {
+//            setBackgroundCompat(a.getDrawable(0));
+//        } finally {
+//            a.recycle();
+//        }
+        setBackgroundCompat(getResources().getDrawable(R.drawable.list_selector));
     }
 
     private void setBackgroundCompat(Drawable d) {

+ 5 - 0
library/src/main/res/drawable/list_item_selected.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#D0D0D0" />
+</shape>

+ 5 - 0
library/src/main/res/drawable/list_item_selected_dark.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#303030" />
+</shape>

+ 7 - 0
library/src/main/res/drawable/list_selector.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+
+    <item android:state_pressed="true" android:drawable="@drawable/list_item_selected" />
+    <item android:drawable="@drawable/transparent" />
+
+</selector>

+ 7 - 0
library/src/main/res/drawable/list_selector_dark.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+
+    <item android:state_pressed="true" android:drawable="@drawable/list_item_selected_dark" />
+    <item android:drawable="@drawable/transparent" />
+
+</selector>

+ 5 - 0
library/src/main/res/drawable/transparent.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@android:color/transparent" />
+</shape>

+ 0 - 1
library/src/main/res/layout/dialog_listitem.xml

@@ -4,7 +4,6 @@
     android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="?android:selectableItemBackground"
     android:clickable="true"
     android:gravity="center_vertical">
 

+ 0 - 1
library/src/main/res/layout/dialog_listitem_multichoice.xml

@@ -4,7 +4,6 @@
     android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="?android:selectableItemBackground"
     android:clickable="true"
     android:gravity="center_vertical">
 

+ 0 - 1
library/src/main/res/layout/dialog_listitem_singlechoice.xml

@@ -4,7 +4,6 @@
     android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="?android:selectableItemBackground"
     android:clickable="true"
     android:gravity="center_vertical">
 

+ 6 - 6
library/src/main/res/layout/material_dialog.xml

@@ -81,18 +81,18 @@
         android:layout_marginRight="@dimen/button_padding_frame_side"
         android:layout_marginBottom="@dimen/button_padding_frame_bottom">
 
-        <com.afollestad.materialdialogs.MaterialButton
+        <com.afollestad.materialdialogs.views.MaterialButton
             android:id="@+id/buttonDefaultNeutral"
             style="@style/ActionButton"
             android:layout_alignParentLeft="true"
             android:layout_marginLeft="@dimen/neutral_button_margin" />
 
-        <com.afollestad.materialdialogs.MaterialButton
+        <com.afollestad.materialdialogs.views.MaterialButton
             android:id="@+id/buttonDefaultNegative"
             style="@style/ActionButton"
             android:layout_toLeftOf="@+id/buttonDefaultPositive" />
 
-        <com.afollestad.materialdialogs.MaterialButton
+        <com.afollestad.materialdialogs.views.MaterialButton
             android:id="@+id/buttonDefaultPositive"
             style="@style/ActionButton"
             android:layout_alignParentRight="true" />
@@ -106,15 +106,15 @@
         android:layout_height="wrap_content"
         android:layout_marginBottom="@dimen/button_padding_frame_bottom">
 
-        <com.afollestad.materialdialogs.MaterialButton
+        <com.afollestad.materialdialogs.views.MaterialButton
             android:id="@+id/buttonStackedPositive"
             style="@style/ActionButtonStacked" />
 
-        <com.afollestad.materialdialogs.MaterialButton
+        <com.afollestad.materialdialogs.views.MaterialButton
             android:id="@+id/buttonStackedNegative"
             style="@style/ActionButtonStacked" />
 
-        <com.afollestad.materialdialogs.MaterialButton
+        <com.afollestad.materialdialogs.views.MaterialButton
             android:id="@+id/buttonStackedNeutral"
             style="@style/ActionButtonStacked" />
 

+ 2 - 0
library/src/main/res/values-v21/styles.xml

@@ -7,6 +7,7 @@
         <item name="item_color">@color/item_light</item>
         <item name="button_color">@color/button_light</item>
         <item name="divider_color">@color/divider_black</item>
+        <item name="list_selector">?android:selectableItemBackground</item>
     </style>
 
     <style name="Dark" parent="android:Theme.Material.Dialog.Alert">
@@ -15,6 +16,7 @@
         <item name="item_color">@color/item_dark</item>
         <item name="button_color">@color/button_dark</item>
         <item name="divider_color">@color/divider_white</item>
+        <item name="list_selector">?android:selectableItemBackground</item>
     </style>
 
 </resources>

+ 1 - 0
library/src/main/res/values/attrs.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
+    <attr name="list_selector" format="reference" />
     <attr name="title_color" format="color" />
     <attr name="content_color" format="color" />
     <attr name="item_color" format="color" />

+ 2 - 1
library/src/main/res/values/styles.xml

@@ -3,12 +3,12 @@
 
     <style name="Light" parent="android:Theme.Holo.Light">
         <item name="android:actionModeStyle">@style/ActionModeStyle</item>
-
         <item name="title_color">@color/title_light</item>
         <item name="content_color">@color/content_light</item>
         <item name="item_color">@color/item_light</item>
         <item name="button_color">@color/button_light</item>
         <item name="divider_color">@color/divider_black</item>
+        <item name="list_selector">@drawable/list_selector</item>
     </style>
 
     <style name="Dark" parent="android:Theme.Holo">
@@ -17,6 +17,7 @@
         <item name="item_color">@color/item_dark</item>
         <item name="button_color">@color/button_dark</item>
         <item name="divider_color">@color/divider_white</item>
+        <item name="list_selector">@drawable/list_selector_dark</item>
     </style>
 
     <style name="ActionButtonStacked" parent="@style/ActionButton">