diff --git a/README.md b/README.md
index 8a8402a563dd5f4fcdb8a686e86e1446619003d3..a6dd56f0a34a5bfee57f6f2ffbd47d59d15e0208 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,27 @@
# react-native-picker
-[](https://www.npmjs.com/package/react-native-picker)
+[](https://www.npmjs.com/package/react-native-picker)
-A Native Picker with high performance.
-
-pure javascript version -> [v3.0.5](https://github.com/beefe/react-native-picker/tree/pure-javascript-version)
+### For pure javascript version -> [v3.0.5](https://github.com/beefe/react-native-picker/tree/pure-javascript-version)

###Documentation
####Props
-- pickerConfirmBtnText string, 确认按钮文字
-- pickerCancelBtnText string, 取消按钮文字
-- pickerTitleText string, 标题文字
-- pickerConfirmBtnColor [1, 186, 245, 1], 确认按钮字体颜色
-- pickerCancelBtnColor [1, 186, 245, 1], 取消按钮字体颜色
-- pickerTitleColor [20, 20, 20, 1], 标题字体颜色
-- pickerToolBarBg [232, 232, 232, 1], 工具栏背景颜色
-- pickerBg [196, 199, 206, 1], picker背景颜色
-- pickerData 数组或对象,picker数据
-- selectedValue string,默认选中数据
-- onPickerConfirm function,确认按钮回调
-- onPickerCancel function,取消按钮回调
-- onPickerSelect function,滚轮滚动时回调
+- pickerConfirmBtnText(string), 确认按钮文字
+- pickerCancelBtnText(string), 取消按钮文字
+- pickerTitleText(string), 标题文字
+- pickerConfirmBtnColor([1, 186, 245, 1]), 确认按钮字体颜色
+- pickerCancelBtnColor([1, 186, 245, 1]), 取消按钮字体颜色
+- pickerTitleColor([20, 20, 20, 1]), 标题字体颜色
+- pickerToolBarBg([232, 232, 232, 1]), 工具栏背景颜色
+- pickerBg([196, 199, 206, 1]), picker背景颜色
+- pickerData(array), picker数据
+- selectedValue(string),默认选中数据
+- onPickerConfirm(function),确认按钮回调
+- onPickerCancel(function),取消按钮回调
+- onPickerSelect(function),滚轮滚动时回调
####Methods
- toggle show or hide picker, default to be hiden
diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java
index eabd322f1453c3b19539f14d7d79744d1e150562..a5c284fc5f56fcef7a6f7ad78a4a189dfef84100 100644
--- a/android/src/main/java/com/beefe/picker/PickerViewModule.java
+++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java
@@ -30,7 +30,13 @@ import com.facebook.react.modules.core.DeviceEventManagerModule;
import java.util.ArrayList;
/**
+ * Author: heng
+ *
* Created by heng on 16/9/5.
+ *
+ * Edited by heng on 16/9/22.
+ * 1. PopupWindow height : full screen -> assignation
+ * 2. Added pickerToolBarHeight support
*/
public class PickerViewModule extends ReactContextBaseJavaModule {
@@ -42,6 +48,7 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
private static final String IS_LOOP = "isLoop";
private static final String PICKER_BG_COLOR = "pickerBg";
private static final String TEXT_BAR_COLOR = "pickerToolBarBg";
+ private static final String TEXT_BAR_HEIGHT = "pickerToolBarHeight";
private static final String CONFIRM_TEXT = "pickerConfirmBtnText";
private static final String CONFIRM_TEXT_COLOR = "pickerConfirmBtnColor";
private static final String CANCEL_TEXT = "pickerCancelBtnText";
@@ -73,7 +80,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
private ArrayList curSelectedList = new ArrayList<>();
- private RelativeLayout pickerParent;
private RelativeLayout barLayout;
private TextView cancelTV;
private TextView titleTV;
@@ -81,6 +87,9 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
private PickerViewLinkage pickerViewLinkage;
private PickerViewAlone pickerViewAlone;
+ private int pickerViewHeight;
+ private int barViewHeight;
+
public PickerViewModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@@ -95,7 +104,6 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
Activity activity = getCurrentActivity();
if (activity != null && options.hasKey(PICKER_DATA)) {
view = activity.getLayoutInflater().inflate(R.layout.popup_picker_view, null);
- pickerParent = (RelativeLayout) view.findViewById(R.id.pickerParent);
barLayout = (RelativeLayout) view.findViewById(R.id.barLayout);
cancelTV = (TextView) view.findViewById(R.id.cancel);
titleTV = (TextView) view.findViewById(R.id.title);
@@ -103,13 +111,19 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
pickerViewLinkage = (PickerViewLinkage) view.findViewById(R.id.pickerViewLinkage);
pickerViewAlone = (PickerViewAlone) view.findViewById(R.id.pickerViewAlone);
- pickerParent.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- commonEvent(EVENT_KEY_CANCEL);
- hide();
+ if (options.hasKey(TEXT_BAR_HEIGHT)) {
+ try {
+ barViewHeight = options.getInt(TEXT_BAR_HEIGHT);
+ } catch (Exception e) {
+ barViewHeight = (int) options.getDouble(TEXT_BAR_HEIGHT);
}
- });
+ } else {
+ barViewHeight = (int) (activity.getResources().getDisplayMetrics().density * 40);
+ }
+ RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.MATCH_PARENT,
+ barViewHeight);
+ barLayout.setLayoutParams(params);
if (options.hasKey(TEXT_BAR_COLOR)) {
ReadableArray array = options.getArray(TEXT_BAR_COLOR);
@@ -237,7 +251,9 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
pickerViewAlone.setVisibility(View.GONE);
pickerViewLinkage.setPickerData(pickerData, curSelectedList);
pickerViewLinkage.setIsLoop(isLoop);
- pickerViewLinkage.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
+ if (options.hasKey(PICKER_BG_COLOR)) {
+ pickerViewLinkage.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
+ }
pickerViewLinkage.setOnSelectListener(new OnSelectedListener() {
@Override
public void onSelected(ArrayList selectedList) {
@@ -246,6 +262,7 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
}
});
pickerViewLinkage.setSelectValue(selectValue, curSelectedList);
+ pickerViewHeight = pickerViewLinkage.getViewHeight();
break;
default:
pickerViewAlone.setVisibility(View.VISIBLE);
@@ -253,7 +270,9 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
pickerViewAlone.setPickerData(pickerData, curSelectedList);
pickerViewAlone.setIsLoop(isLoop);
- pickerViewAlone.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
+ if (options.hasKey(PICKER_BG_COLOR)) {
+ pickerViewAlone.setBackgroundColor(Color.argb(pickerColor[3], pickerColor[0], pickerColor[1], pickerColor[2]));
+ }
pickerViewAlone.setOnSelectedListener(new OnSelectedListener() {
@Override
@@ -264,16 +283,16 @@ public class PickerViewModule extends ReactContextBaseJavaModule {
});
pickerViewAlone.setSelectValue(selectValue, curSelectedList);
+ pickerViewHeight = pickerViewAlone.getViewHeight();
break;
}
if (popupWindow == null) {
- popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
+ int height = barViewHeight + pickerViewHeight;
+ popupWindow = new PopupWindow(WindowManager.LayoutParams.MATCH_PARENT, height);
popupWindow.setBackgroundDrawable(new ColorDrawable());
- popupWindow.setFocusable(true);
popupWindow.setAnimationStyle(R.style.PopAnim);
- popupWindow.setOutsideTouchable(true);
}
popupWindow.setContentView(view);
popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
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 df2f8c38496432c23768127c84b216aef7ccbc99..1978401a59b57ceed4e19868757a2583fb9f8ae1 100644
--- a/android/src/main/java/com/beefe/picker/view/LoopView.java
+++ b/android/src/main/java/com/beefe/picker/view/LoopView.java
@@ -32,7 +32,6 @@ public class LoopView extends View {
private GestureDetector gestureDetector;
OnItemSelectedListener onItemSelectedListener;
- // Timer mTimer;
private ScheduledExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture> mFuture;
@@ -224,6 +223,10 @@ public class LoopView extends View {
return items.indexOf(item);
}
+ public int getViewHeight(){
+ return measuredHeight;
+ }
+
public final void setSelectedPosition(int initPosition) {
if (initPosition < 0) {
this.initPosition = 0;
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 194c9438e0cade483ca6e5cb38a0649af088c5eb..4674e98b2b60cf5acf656a2cc29e9eca05ff9065 100644
--- a/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java
+++ b/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java
@@ -169,6 +169,16 @@ public class PickerViewAlone extends LinearLayout {
}
}
+ public int getViewHeight(){
+ int viewHeight = 0;
+ View view = pickerViewAloneLayout.getChildAt(0);
+ if (view instanceof LoopView) {
+ LoopView loopView = (LoopView) view;
+ viewHeight = loopView.getViewHeight();
+ }
+ return viewHeight;
+ }
+
private ArrayList arrayToList(ReadableArray array) {
ArrayList values = new ArrayList<>();
for (int i = 0; i < array.size(); 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 0005876d414324fa77ba04f676d5f499de3407ab..793a4c439c56661e3a5f0852bc5fef171ae3a550 100644
--- a/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java
+++ b/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java
@@ -446,6 +446,10 @@ public class PickerViewLinkage extends LinearLayout {
}
}
+ public int getViewHeight (){
+ return loopViewOne.getViewHeight();
+ }
+
public void setOnSelectListener(OnSelectedListener listener) {
this.onSelectedListener = listener;
}
diff --git a/android/src/main/res/layout/popup_picker_view.xml b/android/src/main/res/layout/popup_picker_view.xml
index 1f435a2bc3b6c696e9c57248c9b3e06fe3747b6d..9886bdd02b60f134013271cf286181a8ac32e6dc 100644
--- a/android/src/main/res/layout/popup_picker_view.xml
+++ b/android/src/main/res/layout/popup_picker_view.xml
@@ -1,14 +1,9 @@
-
{
- fn(android ? status : !status);
+ //android return two params: err(error massage) and status(show or not)
+ //ios return only one param: hide or not...
+ Picker.isPickerShow((err, status) => {
+ let returnValue = null;
+ if(android){
+ returnValue = err ? false : status;
+ }
+ else if(ios){
+ returnValue = !err;
+ }
+ fn(returnValue);
});
}
};
\ No newline at end of file