类android.util.LayoutDirection源码实例Demo

下面列出了怎么用android.util.LayoutDirection的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: edx-app-android   文件: IconDrawable.java
@TargetApi(JELLY_BEAN_MR1)
@CheckResult
private boolean needMirroring() {
    if (isAutoMirrored()) {
        if (SDK_INT >= M) {
            return getLayoutDirection() == LayoutDirection.RTL;
        }
        // Since getLayoutDirection() is hidden prior to Marshmallow, we
        // will try to get the layout direction from the View, which we will
        // assume is set as the callback. As the setLayoutDirection() method
        // is also hidden, we can safely rely on the behaviour of the
        // platform Views to provide a correct replacement for the hidden
        // method.
        Callback callback = getCallback();
        if (callback instanceof View) {
            return ((View) callback).getLayoutDirection() == LAYOUT_DIRECTION_RTL;
        }
    }
    return false;
}
 
源代码2 项目: AndroidWallet   文件: FlowLayout.java
public FlowLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout);
    mGravity = ta.getInt(R.styleable.TagFlowLayout_tag_gravity, LEFT);
    int layoutDirection = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault());
    if (layoutDirection == LayoutDirection.RTL) {
        if (mGravity == LEFT) {
            mGravity = RIGHT;
        } else {
            mGravity = LEFT;
        }
    }
    ta.recycle();
}
 
源代码3 项目: VectorChildFinder   文件: VectorDrawableCompat.java
@SuppressLint({"NewApi", "WrongConstant"})
private boolean needMirroring() {
    if (Build.VERSION.SDK_INT < 17) {
        return false;
    } else {
        return isAutoMirrored() && getLayoutDirection() == LayoutDirection.RTL;
    }
}
 
源代码4 项目: adamant-android   文件: DrawableClickListener.java
@Override
public boolean onTouch(View v, MotionEvent event) {
    if (!viewType.isInstance(v)) { return false; }

    EditText editableView = viewType.cast(v);

    if(editableView != null && event.getAction() == MotionEvent.ACTION_UP) {
        Drawable drawableStart = editableView.getCompoundDrawablesRelative()[DRAWABLE_START];
        Drawable drawableEnd = editableView.getCompoundDrawablesRelative()[DRAWABLE_END];

        if (drawableEnd == null && drawableStart == null) {
            return false;
        }

        boolean isStartClicked = false;
        boolean isEndClicked = false;

        int layoutDirection = editableView.getLayoutDirection();
        if (layoutDirection == LayoutDirection.LTR) {
            isStartClicked = detectLeftClick(editableView, drawableStart, event);
            isEndClicked = detectRightClick(editableView, drawableStart, event);
        } else {
            isStartClicked = detectRightClick(editableView, drawableStart, event);
            isEndClicked = detectLeftClick(editableView, drawableStart, event);
        }

        if (isStartClicked) {
            onClickStartDrawable(v);
            return true;
        }

        if (isEndClicked) {
            onClickEndDrawable(v);
            return true;
        }

    }
    return false;
}
 
/**
 * Adjusts the given {@code TextView} to have a layout direction that matches the UI direction
 * when the contents of the view is considered short (based on SHORTNESS_FACTOR).
 * @param textView The text view to adjust.
 */
@SuppressLint("RtlHardcoded")
private void adjustViewDirection(TextView textView) {
    float textWidth = textView.getPaint().measureText(textView.getText().toString());
    if (textWidth < SHORTNESS_FACTOR * textView.getWidth()) {
        int layoutDirection =
                LocalizationUtils.isLayoutRtl() ? LayoutDirection.RTL : LayoutDirection.LTR;
        if (layoutDirection == LayoutDirection.LTR) textView.setGravity(Gravity.LEFT);
        if (layoutDirection == LayoutDirection.RTL) textView.setGravity(Gravity.RIGHT);
    }
}
 
源代码6 项目: FlowLayout   文件: FlowLayout.java
public FlowLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout);
    mGravity = ta.getInt(R.styleable.TagFlowLayout_tag_gravity, LEFT);
    int layoutDirection = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault());
    if (layoutDirection == LayoutDirection.RTL) {
        if (mGravity == LEFT) {
            mGravity = RIGHT;
        } else {
            mGravity = LEFT;
        }
    }
    ta.recycle();
}
 
源代码7 项目: 365browser   文件: OverlayPanelTextViewInflater.java
/**
 * Adjusts the given {@code TextView} to have a layout direction that matches the UI direction
 * when the contents of the view is considered short (based on SHORTNESS_FACTOR).
 * @param textView The text view to adjust.
 */
@SuppressLint("RtlHardcoded")
private void adjustViewDirection(TextView textView) {
    float textWidth = textView.getPaint().measureText(textView.getText().toString());
    if (textWidth < SHORTNESS_FACTOR * textView.getWidth()) {
        int layoutDirection =
                LocalizationUtils.isLayoutRtl() ? LayoutDirection.RTL : LayoutDirection.LTR;
        if (layoutDirection == LayoutDirection.LTR) textView.setGravity(Gravity.LEFT);
        if (layoutDirection == LayoutDirection.RTL) textView.setGravity(Gravity.RIGHT);
    }
}
 
源代码8 项目: react-native-GPay   文件: ReactToolbarManager.java
@ReactProp(name = "rtl")
public void setRtl(ReactToolbar view, boolean rtl) {
  view.setLayoutDirection(rtl ? LayoutDirection.RTL : LayoutDirection.LTR);
}
 
@SuppressLint("WrongConstant")
@TargetApi(Build.VERSION_CODES.M)
private boolean needsMirroring() {
    return isAutoMirrored() && getLayoutDirection() == LayoutDirection.RTL;
}
 
源代码10 项目: Carbon   文件: LayerDrawable.java
private void updateLayerBounds(Rect bounds) {
    int padL = 0;
    int padT = 0;
    int padR = 0;
    int padB = 0;

    final Rect outRect = mTmpOutRect;
    int layoutDirection = LayoutDirection.LTR;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        layoutDirection = getLayoutDirection();
    final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
    final ChildDrawable[] array = mLayerState.mChildren;
    final int N = mLayerState.mNum;
    for (int i = 0; i < N; i++) {
        final ChildDrawable r = array[i];
        final Drawable d = r.mDrawable;
        if (d == null) {
            continue;
        }

        final Rect container = mTmpContainer;
        container.set(d.getBounds());

        // Take the resolved layout direction into account. If start / end
        // padding are defined, they will be resolved (hence overriding) to
        // left / right or right / left depending on the resolved layout
        // direction. If start / end padding are not defined, use the
        // left / right ones.
        final int insetL, insetR;
        if (layoutDirection == LayoutDirection.RTL) {
            insetL = r.mInsetE == UNDEFINED_INSET ? r.mInsetL : r.mInsetE;
            insetR = r.mInsetS == UNDEFINED_INSET ? r.mInsetR : r.mInsetS;
        } else {
            insetL = r.mInsetS == UNDEFINED_INSET ? r.mInsetL : r.mInsetS;
            insetR = r.mInsetE == UNDEFINED_INSET ? r.mInsetR : r.mInsetE;
        }

        // Establish containing region based on aggregate padding and
        // requested insets for the current layer.
        container.set(bounds.left + insetL + padL, bounds.top + r.mInsetT + padT,
                bounds.right - insetR - padR, bounds.bottom - r.mInsetB - padB);

        // Apply resolved gravity to drawable based on resolved size.
        final int gravity = resolveGravity(r.mGravity, r.mWidth, r.mHeight,
                d.getIntrinsicWidth(), d.getIntrinsicHeight());
        final int w = r.mWidth < 0 ? d.getIntrinsicWidth() : r.mWidth;
        final int h = r.mHeight < 0 ? d.getIntrinsicHeight() : r.mHeight;
        GravityCompat.apply(gravity, w, h, container, outRect, layoutDirection);
        d.setBounds(outRect);

        if (nest) {
            padL += mPaddingL[i];
            padR += mPaddingR[i];
            padT += mPaddingT[i];
            padB += mPaddingB[i];
        }
    }
}
 
源代码11 项目: Carbon   文件: LayerDrawable.java
@Override
public int getIntrinsicWidth() {
    int width = -1;
    int padL = 0;
    int padR = 0;

    final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
    final ChildDrawable[] array = mLayerState.mChildren;
    final int N = mLayerState.mNum;
    for (int i = 0; i < N; i++) {
        final ChildDrawable r = array[i];
        if (r.mDrawable == null) {
            continue;
        }

        // Take the resolved layout direction into account. If start / end
        // padding are defined, they will be resolved (hence overriding) to
        // left / right or right / left depending on the resolved layout
        // direction. If start / end padding are not defined, use the
        // left / right ones.
        final int insetL, insetR;
        int layoutDirection = LayoutDirection.LTR;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            layoutDirection = getLayoutDirection();
        if (layoutDirection == LayoutDirection.RTL) {
            insetL = r.mInsetE == UNDEFINED_INSET ? r.mInsetL : r.mInsetE;
            insetR = r.mInsetS == UNDEFINED_INSET ? r.mInsetR : r.mInsetS;
        } else {
            insetL = r.mInsetS == UNDEFINED_INSET ? r.mInsetL : r.mInsetS;
            insetR = r.mInsetE == UNDEFINED_INSET ? r.mInsetR : r.mInsetE;
        }

        final int minWidth = r.mWidth < 0 ? r.mDrawable.getIntrinsicWidth() : r.mWidth;
        final int w = minWidth + insetL + insetR + padL + padR;
        if (w > width) {
            width = w;
        }

        if (nest) {
            padL += mPaddingL[i];
            padR += mPaddingR[i];
        }
    }

    return width;
}
 
源代码12 项目: MaterialScrollBar   文件: Utils.java
/**
 *
 * @param c Context
 * @return True if the current layout is RTL.
 */
static boolean isRightToLeft(Context c) {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT &&
            c.getResources().getConfiguration().getLayoutDirection() == LayoutDirection.RTL;
}