From 0e39dea0c6928d7e5c6f0d1e40ca8699f58b3dc9 Mon Sep 17 00:00:00 2001 From: Ahad Birang Date: Tue, 15 May 2018 10:40:34 +0430 Subject: [PATCH] Android custome fontFamily (#301) --- README.md | 1 + .../com/beefe/picker/PickerViewModule.java | 34 +++++++++++++++++++ .../java/com/beefe/picker/view/LoopView.java | 6 ++++ .../beefe/picker/view/PickerViewAlone.java | 12 +++++++ .../beefe/picker/view/PickerViewLinkage.java | 15 ++++++++ 5 files changed, 68 insertions(+) diff --git a/README.md b/README.md index 846bffc..4030ecf 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ |wheelFlex | array | [1, 1, 1] | iOS/Android | | |pickerFontSize | number | 16 | iOS/Android | | |pickerFontColor | array | [31, 31, 31, 1] | iOS/Android | | +|pickerFontFamily | string | | Android | | |pickerRowHeight | number | 24 | iOS | | |pickerData | array | | iOS/Android | | |selectedValue | array | | iOS/Android | | diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 50a212a..813a0bd 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -1,9 +1,11 @@ package com.beefe.picker; +import android.content.res.AssetManager; import android.app.Activity; import android.app.Dialog; import android.graphics.Color; import android.graphics.PixelFormat; +import android.graphics.Typeface; import android.support.annotation.Nullable; import android.text.TextUtils; import android.view.Gravity; @@ -75,6 +77,10 @@ import static android.graphics.Color.argb; */ public class PickerViewModule extends ReactContextBaseJavaModule implements LifecycleEventListener { + + private static final String FONTS = "fonts/"; + private static final String OTF = ".otf"; + private static final String TTF = ".ttf"; private static final String REACT_CLASS = "BEEPickerManager"; @@ -104,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_FONT_FAMILY = "pickerFontFamily"; + private static final String PICKER_EVENT_NAME = "pickerEvent"; private static final String EVENT_KEY_CONFIRM = "confirm"; private static final String EVENT_KEY_CANCEL = "cancel"; @@ -340,6 +348,32 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life break; } + if (options.hasKey(PICKER_FONT_FAMILY)) { + Typeface typeface = null; + AssetManager assetManager = activity.getApplicationContext().getAssets(); + final String fontFamily = options.getString(PICKER_FONT_FAMILY); + try { + String path = FONTS + fontFamily + TTF; + typeface = Typeface.createFromAsset(assetManager, path); + } catch (Exception ignored) { + try { + String path = FONTS + fontFamily + OTF; + typeface = Typeface.createFromAsset(assetManager, path); + } catch (Exception ignored2) { + try { + typeface = Typeface.create(fontFamily, Typeface.NORMAL); + } catch (Exception ignored3) { + } + } + } + cancelTV.setTypeface(typeface); + titleTV.setTypeface(typeface); + confirmTV.setTypeface(typeface); + + pickerViewAlone.setTypeface(typeface); + pickerViewLinkage.setTypeface(typeface); + } + if (options.hasKey(SELECTED_VALUE)) { ReadableArray array = options.getArray(SELECTED_VALUE); String[] selectedValue = getSelectedValue(array); 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 3c07cc5..a30ce35 100644 --- a/android/src/main/java/com/beefe/picker/view/LoopView.java +++ b/android/src/main/java/com/beefe/picker/view/LoopView.java @@ -203,6 +203,12 @@ public class LoopView extends View { invalidate(); } + public void setTypeface(Typeface typeface){ + paintOuterText.setTypeface(typeface); + paintCenterText.setTypeface(typeface); + invalidate(); + } + public final void setNotLoop() { isLoop = false; } 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 b24e6b1..7b4bc11 100644 --- a/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java +++ b/android/src/main/java/com/beefe/picker/view/PickerViewAlone.java @@ -1,6 +1,7 @@ package com.beefe.picker.view; import android.content.Context; +import android.graphics.Typeface; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -212,6 +213,17 @@ public class PickerViewAlone extends LinearLayout { } } + public void setTypeface(Typeface typeface){ + 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.setTypeface(typeface); + } + } + } + public void setTextEllipsisLen(int len){ 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 f1e6be3..c8c522b 100644 --- a/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java +++ b/android/src/main/java/com/beefe/picker/view/PickerViewLinkage.java @@ -1,6 +1,7 @@ package com.beefe.picker.view; import android.content.Context; +import android.graphics.Typeface; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -603,6 +604,20 @@ public class PickerViewLinkage extends LinearLayout { } } + public void setTypeface(Typeface typeface){ + switch (curRow) { + case 2: + loopViewOne.setTypeface(typeface); + loopViewTwo.setTypeface(typeface); + break; + case 3: + loopViewOne.setTypeface(typeface); + loopViewTwo.setTypeface(typeface); + loopViewThree.setTypeface(typeface); + break; + } + } + public void setTextEllipsisLen(int len){ switch (curRow) { case 2: -- 2.26.2