From a10fe489bc64bbcb90bc22b50f42a3f03b49fb00 Mon Sep 17 00:00:00 2001 From: xingxing Date: Fri, 3 Jun 2016 23:18:35 +0800 Subject: [PATCH] support rtl --- .../java/me/philio/pinentry/PinEntryView.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/pinentry/src/main/java/me/philio/pinentry/PinEntryView.java b/pinentry/src/main/java/me/philio/pinentry/PinEntryView.java index 8ff5e1d..c46e631 100644 --- a/pinentry/src/main/java/me/philio/pinentry/PinEntryView.java +++ b/pinentry/src/main/java/me/philio/pinentry/PinEntryView.java @@ -23,6 +23,8 @@ import android.os.Build; import android.os.Parcel; import android.os.Parcelable; +import android.support.v4.text.TextUtilsCompat; +import android.support.v4.view.ViewCompat; import android.text.Editable; import android.text.InputFilter; import android.text.InputType; @@ -39,6 +41,8 @@ import android.widget.EditText; import android.widget.TextView; +import java.util.Locale; + /** * A PIN entry view widget for Android based on the Android 5 Material Theme via the AppCompat v7 * support library. @@ -199,14 +203,19 @@ public PinEntryView(Context context, AttributeSet attrs, int defStyle) { @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // Position the text views + final boolean isLayoutRtl = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_RTL; for (int i = 0; i < digits; i++) { View child = getChildAt(i); - int left = i * digitWidth + (i > 0 ? i * digitSpacing : 0); - child.layout( - left + getPaddingLeft() + digitElevation, - getPaddingTop() + (digitElevation / 2), - left + getPaddingLeft() + digitElevation + digitWidth, - getPaddingTop() + (digitElevation / 2) + digitHeight); + int left; + if (!isLayoutRtl) { + left = i * digitWidth + (i > 0 ? i * digitSpacing : 0); + } else { + int j = digits - 1 - i; + left = j * digitWidth + (j > 0 ? j * digitSpacing : 0); + } + int childLeft = left + getPaddingLeft() + digitElevation; + int childTop = getPaddingTop() + (digitElevation / 2); + child.layout(childLeft, childTop, childLeft + digitWidth, childTop + digitHeight); } // Add the edit text as a 1px wide view to allow it to focus