From 1c2021689ae9b7c98656534f918a4771698e66de Mon Sep 17 00:00:00 2001 From: Jared Rummler Date: Wed, 11 May 2016 01:20:45 -0700 Subject: [PATCH] add ability to set the PopupWindow height (see #11) Also, - update build tools to 23.0.3 - update support-annotations to 23.3.0 - maven 1.0.8 --- README.md | 20 +++++---- .../materialspinner/example/MainActivity.java | 7 +++- app/src/main/res/layout/content_main.xml | 2 + gradle.properties | 4 +- lib-materialspinner/build.gradle | 4 +- .../materialspinner/MaterialSpinner.java | 41 ++++++++++++++++++- .../src/main/res/layout/ms__list_item.xml | 2 +- .../src/main/res/values/attrs.xml | 6 +++ .../src/main/res/values/dimens.xml | 5 ++- 9 files changed, 73 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 051cbcc..68b4a5d 100644 --- a/README.md +++ b/README.md @@ -32,27 +32,29 @@ spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener com.jaredrummler material-spinner - 1.0.7 + 1.0.8 aar ``` diff --git a/app/src/main/java/com/jaredrummler/materialspinner/example/MainActivity.java b/app/src/main/java/com/jaredrummler/materialspinner/example/MainActivity.java index ba69d65..ac039f5 100644 --- a/app/src/main/java/com/jaredrummler/materialspinner/example/MainActivity.java +++ b/app/src/main/java/com/jaredrummler/materialspinner/example/MainActivity.java @@ -31,6 +31,11 @@ public class MainActivity extends AppCompatActivity { + private static final String[] ANDROID_VERSIONS = { + "Cupcake", "Donut", "Eclair", "Froyo", "Gingerbread", "Honeycomb", "Ice Cream Sandwich", "Jelly Bean", "KitKat", + "Lollipop", "Marshmallow" + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -49,7 +54,7 @@ public class MainActivity extends AppCompatActivity { }); MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner); - spinner.setItems("Ice Cream Sandwich", "Jelly Bean", "KitKat", "Lollipop", "Marshmallow"); + spinner.setItems(ANDROID_VERSIONS); spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() { @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) { diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 25e8525..6a97141 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -32,6 +32,8 @@ diff --git a/gradle.properties b/gradle.properties index f846d15..c55d615 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,8 +15,8 @@ # # -VERSION_NAME=1.0.7 -VERSION_CODE=8 +VERSION_NAME=1.0.8 +VERSION_CODE=9 GROUP=com.jaredrummler POM_NAME=Material Spinner diff --git a/lib-materialspinner/build.gradle b/lib-materialspinner/build.gradle index 8801a89..c414fa2 100644 --- a/lib-materialspinner/build.gradle +++ b/lib-materialspinner/build.gradle @@ -19,7 +19,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 23 - buildToolsVersion "23.0.2" + buildToolsVersion "23.0.3" resourcePrefix 'ms__' defaultConfig { @@ -30,7 +30,7 @@ android { dependencies { testCompile 'junit:junit:4.12' - compile 'com.android.support:support-annotations:23.2.0' + compile 'com.android.support:support-annotations:23.3.0' } apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle' diff --git a/lib-materialspinner/src/main/java/com/jaredrummler/materialspinner/MaterialSpinner.java b/lib-materialspinner/src/main/java/com/jaredrummler/materialspinner/MaterialSpinner.java index dea4a47..7c45e69 100644 --- a/lib-materialspinner/src/main/java/com/jaredrummler/materialspinner/MaterialSpinner.java +++ b/lib-materialspinner/src/main/java/com/jaredrummler/materialspinner/MaterialSpinner.java @@ -61,6 +61,8 @@ public class MaterialSpinner extends TextView { private Drawable arrowDrawable; private boolean hideArrow; private boolean nothingSelected; + private int popupWindowMaxHeight; + private int popupWindowHeight; private int selectedIndex; private int backgroundColor; private int arrowColor; @@ -93,6 +95,9 @@ private void init(Context context, AttributeSet attrs) { textColor = ta.getColor(R.styleable.MaterialSpinner_ms_text_color, defaultColor); arrowColor = ta.getColor(R.styleable.MaterialSpinner_ms_arrow_tint, textColor); hideArrow = ta.getBoolean(R.styleable.MaterialSpinner_ms_hide_arrow, false); + popupWindowMaxHeight = ta.getDimensionPixelSize(R.styleable.MaterialSpinner_ms_dropdown_max_height, 0); + popupWindowHeight = ta.getLayoutDimension(R.styleable.MaterialSpinner_ms_dropdown_height, + WindowManager.LayoutParams.WRAP_CONTENT); arrowColorDisabled = Utils.lighter(arrowColor, 0.8f); } finally { ta.recycle(); @@ -183,7 +188,7 @@ private void init(Context context, AttributeSet attrs) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { popupWindow.setWidth(MeasureSpec.getSize(widthMeasureSpec)); - popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); + popupWindow.setHeight(calculatePopupWindowHeight()); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @@ -411,6 +416,40 @@ private void animateArrow(boolean shouldRotateUp) { animator.start(); } + /** + * Set the maximum height of the dropdown menu. + * + * @param height + * the height in pixels + */ + public void setDropdownMaxHeight(int height) { + popupWindowMaxHeight = height; + popupWindow.setHeight(calculatePopupWindowHeight()); + } + + /** + * Set the height of the dropdown menu + * + * @param height + * the height in pixels + */ + public void setDropdownHeight(int height) { + popupWindowHeight = height; + popupWindow.setHeight(calculatePopupWindowHeight()); + } + + private int calculatePopupWindowHeight() { + float listViewHeight = adapter.getCount() * getResources().getDimension(R.dimen.ms__item_height); + if (popupWindowMaxHeight > 0 && listViewHeight > popupWindowMaxHeight) { + return popupWindowMaxHeight; + } else if (popupWindowHeight != WindowManager.LayoutParams.MATCH_PARENT + && popupWindowHeight != WindowManager.LayoutParams.WRAP_CONTENT + && popupWindowHeight <= listViewHeight) { + return popupWindowHeight; + } + return WindowManager.LayoutParams.WRAP_CONTENT; + } + /** * Get the {@link PopupWindow}. * diff --git a/lib-materialspinner/src/main/res/layout/ms__list_item.xml b/lib-materialspinner/src/main/res/layout/ms__list_item.xml index c183a82..1dda909 100644 --- a/lib-materialspinner/src/main/res/layout/ms__list_item.xml +++ b/lib-materialspinner/src/main/res/layout/ms__list_item.xml @@ -24,7 +24,7 @@ android:layout_gravity="start|center_vertical" android:ellipsize="marquee" android:gravity="center_vertical" - android:minHeight="48dp" + android:minHeight="@dimen/ms__item_height" android:paddingBottom="@dimen/ms__padding_top" android:paddingLeft="@dimen/ms__padding_left" android:paddingRight="@dimen/ms__padding_left" diff --git a/lib-materialspinner/src/main/res/values/attrs.xml b/lib-materialspinner/src/main/res/values/attrs.xml index 78a949a..c04f1cf 100644 --- a/lib-materialspinner/src/main/res/values/attrs.xml +++ b/lib-materialspinner/src/main/res/values/attrs.xml @@ -22,5 +22,11 @@ + + + + + + \ No newline at end of file diff --git a/lib-materialspinner/src/main/res/values/dimens.xml b/lib-materialspinner/src/main/res/values/dimens.xml index d6860bd..e97923b 100644 --- a/lib-materialspinner/src/main/res/values/dimens.xml +++ b/lib-materialspinner/src/main/res/values/dimens.xml @@ -17,6 +17,7 @@ --> - 24dp - 12dp + 24dp + 12dp + 48dp \ No newline at end of file