From d7ec56e4c5c3e2f91978fe3c43684600cce1e708 Mon Sep 17 00:00:00 2001 From: winfredxu Date: Thu, 24 Jan 2019 19:40:06 +0800 Subject: [PATCH 1/3] Support PickerView height customization, directly set height for ios and set items visible for android. --- .../com/beefe/picker/PickerViewModule.java | 17 ++++++++++++++++ .../java/com/beefe/picker/view/LoopView.java | 6 ++++++ .../beefe/picker/view/PickerViewAlone.java | 11 ++++++++++ .../beefe/picker/view/PickerViewLinkage.java | 14 +++++++++++++ index.d.ts | 20 +++++++++++++++++++ index.js | 4 +++- 6 files changed, 71 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 813a0bddf..b36819e74 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -110,6 +110,8 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life private static final String PICKER_TEXT_SIZE = "pickerFontSize"; private static final String PICKER_TEXT_ELLIPSIS_LEN = "pickerTextEllipsisLen"; + private static final String PICKER_ITEMS_VISIBLE_COUNT = "androidItemsVisibleCount"; + private static final String PICKER_FONT_FAMILY = "pickerFontFamily"; private static final String PICKER_EVENT_NAME = "pickerEvent"; @@ -300,6 +302,19 @@ public void onClick(View v) { } } + int pickerVisibleItemsCount = 9; + if (options.hasKey(PICKER_ITEMS_VISIBLE_COUNT)) { + try { + pickerVisibleItemsCount = options.getInt(PICKER_ITEMS_VISIBLE_COUNT); + } catch (Exception e) { + pickerVisibleItemsCount = (int) options.getDouble(PICKER_ITEMS_VISIBLE_COUNT); + } + + if(pickerVisibleItemsCount %2 ==0){ + pickerVisibleItemsCount++; + } + } + ReadableArray pickerData = options.getArray(PICKER_DATA); int pickerViewHeight; @@ -313,6 +328,7 @@ public void onClick(View v) { pickerViewLinkage.setPickerData(pickerData, weights); pickerViewLinkage.setTextColor(pickerTextColor); pickerViewLinkage.setTextSize(pickerTextSize); + pickerViewLinkage.setItemsVisibleCount(pickerVisibleItemsCount); pickerViewLinkage.setTextEllipsisLen(pickerTextEllipsisLen); pickerViewLinkage.setIsLoop(isLoop); @@ -333,6 +349,7 @@ public void onSelected(ArrayList selectedList) { pickerViewAlone.setPickerData(pickerData, weights); pickerViewAlone.setTextColor(pickerTextColor); pickerViewAlone.setTextSize(pickerTextSize); + pickerViewAlone.setItemsVisibleCount(pickerVisibleItemsCount); pickerViewAlone.setTextEllipsisLen(pickerTextEllipsisLen); pickerViewAlone.setIsLoop(isLoop); diff --git a/android/src/main/java/com/beefe/picker/view/LoopView.java b/android/src/main/java/com/beefe/picker/view/LoopView.java index a30ce35c7..674fdf087 100644 --- a/android/src/main/java/com/beefe/picker/view/LoopView.java +++ b/android/src/main/java/com/beefe/picker/view/LoopView.java @@ -269,6 +269,12 @@ public final void setItems(List items) { invalidate(); } + public final void setItemsVisibleCount(int itemsVisibleCount){ + this.itemsVisible=itemsVisibleCount; + remeasure(); + invalidate(); + } + public String getIndexItem(int index) { return items.get(index); } diff --git a/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java b/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java index 7b4bc111d..36a0dfdf7 100644 --- a/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java +++ b/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java @@ -213,6 +213,17 @@ public void setTextSize(float size){ } } + public void setItemsVisibleCount(int count){ + int viewCount = pickerViewAloneLayout.getChildCount(); + for (int i = 0; i < viewCount; i++) { + View view = pickerViewAloneLayout.getChildAt(i); + if (view instanceof LoopView) { + LoopView loopView = (LoopView) view; + loopView.setItemsVisibleCount(count); + } + } + } + public void setTypeface(Typeface typeface){ int viewCount = pickerViewAloneLayout.getChildCount(); for (int i = 0; i < viewCount; i++) { diff --git a/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java b/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java index c8c522b5d..aa5c901d5 100644 --- a/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java +++ b/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java @@ -604,6 +604,20 @@ public void setTextSize(float size){ } } + public void setItemsVisibleCount(int count){ + switch (curRow) { + case 2: + loopViewOne.setItemsVisibleCount(count); + loopViewTwo.setItemsVisibleCount(count); + break; + case 3: + loopViewOne.setItemsVisibleCount(count); + loopViewTwo.setItemsVisibleCount(count); + loopViewThree.setItemsVisibleCount(count); + break; + } + } + public void setTypeface(Typeface typeface){ switch (curRow) { case 2: diff --git a/index.d.ts b/index.d.ts index 7c7093856..0f4ef1e73 100644 --- a/index.d.ts +++ b/index.d.ts @@ -267,4 +267,24 @@ export default class Picker { * @memberof Picker */ static isPickerShow(fn?: (err: any, message: any) => void): boolean + + /** + * Row height of the ios picker view, ios and android are different + * + * Default is 250 + * + * @type {number} + * @memberof PickerOptions + */ + iosPickerHeight?: number + + /** + * Max items of the picker can display (Workaround for set the picker view height on android) + * + * Default is 9 + * + * @type {number} + * @memberof PickerOptions + */ + androidItemsVisibleCount?: number } diff --git a/index.js b/index.js index bb5d1360e..bc025fd18 100644 --- a/index.js +++ b/index.js @@ -27,7 +27,9 @@ const options = { onPickerSelect(){}, pickerToolBarFontSize: 16, pickerFontSize: 16, - pickerFontColor: [31, 31 ,31, 1] + pickerFontColor: [31, 31 ,31, 1], + iosPickerHeight: 250, + androidItemsVisibleCount: 9 }; export default { From 0de5ad20f2e07edf882410efb7ace6ef864de7ec Mon Sep 17 00:00:00 2001 From: winfredxu Date: Thu, 24 Jan 2019 20:14:52 +0800 Subject: [PATCH 2/3] add android iml file. --- android/android.iml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 android/android.iml diff --git a/android/android.iml b/android/android.iml new file mode 100644 index 000000000..0fe7ea9f6 --- /dev/null +++ b/android/android.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + \ No newline at end of file From 06349c2502eeb5a54b3b233d0a4561c6ad69c489 Mon Sep 17 00:00:00 2001 From: Yike Date: Fri, 25 Jan 2019 10:00:58 +0800 Subject: [PATCH 3/3] Fix the issue for IOS set height for picker view --- ios/RCTBEEPickerManager/RCTBEEPickerManager.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ios/RCTBEEPickerManager/RCTBEEPickerManager.m b/ios/RCTBEEPickerManager/RCTBEEPickerManager.m index 0215d49e2..d0acc0e1c 100644 --- a/ios/RCTBEEPickerManager/RCTBEEPickerManager.m +++ b/ios/RCTBEEPickerManager/RCTBEEPickerManager.m @@ -57,6 +57,7 @@ + (BOOL)requiresMainQueueSetup NSString *pickerFontFamily=[NSString stringWithFormat:@"%@",indic[@"pickerFontFamily"]]; NSArray *pickerFontColor=indic[@"pickerFontColor"]; NSString *pickerRowHeight=indic[@"pickerRowHeight"]; + NSString *pickerHeight=indic[@"iosPickerHeight"]; id pickerData=indic[@"pickerData"]; NSMutableDictionary *dataDic=[[NSMutableDictionary alloc]init]; @@ -75,7 +76,7 @@ + (BOOL)requiresMainQueueSetup }]; if ([[UIDevice currentDevice].systemVersion doubleValue] >= 9.0 ) { - self.height=250; + self.height=[pickerHeight integerValue]; }else{ self.height=220; }