Loading core/java/android/app/FragmentBreadCrumbs.java +56 −8 Original line number Original line Diff line number Diff line Loading @@ -19,7 +19,9 @@ package android.app; import android.animation.LayoutTransition; import android.animation.LayoutTransition; import android.app.FragmentManager.BackStackEntry; import android.app.FragmentManager.BackStackEntry; import android.content.Context; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.LayoutInflater; import android.view.View; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup; Loading Loading @@ -52,6 +54,10 @@ public class FragmentBreadCrumbs extends ViewGroup private OnBreadCrumbClickListener mOnBreadCrumbClickListener; private OnBreadCrumbClickListener mOnBreadCrumbClickListener; private int mGravity; private static final int DEFAULT_GRAVITY = Gravity.START | Gravity.CENTER_VERTICAL; /** /** * Interface to intercept clicks on the bread crumbs. * Interface to intercept clicks on the bread crumbs. */ */ Loading Loading @@ -80,6 +86,14 @@ public class FragmentBreadCrumbs extends ViewGroup public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) { public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FragmentBreadCrumbs, defStyle, 0); mGravity = a.getInt(com.android.internal.R.styleable.FragmentBreadCrumbs_gravity, DEFAULT_GRAVITY); a.recycle(); } } /** /** Loading Loading @@ -159,16 +173,50 @@ public class FragmentBreadCrumbs extends ViewGroup @Override @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { protected void onLayout(boolean changed, int l, int t, int r, int b) { // Eventually we should implement our own layout of the views, // Eventually we should implement our own layout of the views, rather than relying on // rather than relying on a linear layout. // a single linear layout. final int childCount = getChildCount(); final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { if (childCount == 0) { final View child = getChildAt(i); return; } final View child = getChildAt(0); int childRight = mPaddingLeft + child.getMeasuredWidth() - mPaddingRight; final int childTop = mPaddingTop; int childBottom = mPaddingTop + child.getMeasuredHeight() - mPaddingBottom; final int childBottom = mPaddingTop + child.getMeasuredHeight() - mPaddingBottom; child.layout(mPaddingLeft, mPaddingTop, childRight, childBottom); int childLeft; int childRight; final int layoutDirection = getLayoutDirection(); final int horizontalGravity = mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK; switch (Gravity.getAbsoluteGravity(horizontalGravity, layoutDirection)) { case Gravity.RIGHT: childRight = mRight - mLeft - mPaddingRight; childLeft = childRight - child.getMeasuredWidth(); break; case Gravity.CENTER_HORIZONTAL: childLeft = mPaddingLeft + (mRight - mLeft - child.getMeasuredWidth()) / 2; childRight = childLeft + child.getMeasuredWidth(); break; case Gravity.LEFT: default: childLeft = mPaddingLeft; childRight = childLeft + child.getMeasuredWidth(); break; } } if (childLeft < mPaddingLeft) { childLeft = mPaddingLeft; } if (childRight > mRight - mLeft - mPaddingRight) { childRight = mRight - mLeft - mPaddingRight; } child.layout(childLeft, childTop, childRight, childBottom); } } @Override @Override Loading core/res/res/values/attrs.xml +6 −0 Original line number Original line Diff line number Diff line Loading @@ -5781,4 +5781,10 @@ <attr name="leftToRight" format="boolean" /> <attr name="leftToRight" format="boolean" /> </declare-styleable> </declare-styleable> <!-- Attributes that can be used with <code><FragmentBreadCrumbs></code> tags. --> <declare-styleable name="FragmentBreadCrumbs"> <attr name="gravity" /> </declare-styleable> </resources> </resources> Loading
core/java/android/app/FragmentBreadCrumbs.java +56 −8 Original line number Original line Diff line number Diff line Loading @@ -19,7 +19,9 @@ package android.app; import android.animation.LayoutTransition; import android.animation.LayoutTransition; import android.app.FragmentManager.BackStackEntry; import android.app.FragmentManager.BackStackEntry; import android.content.Context; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.LayoutInflater; import android.view.View; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup; Loading Loading @@ -52,6 +54,10 @@ public class FragmentBreadCrumbs extends ViewGroup private OnBreadCrumbClickListener mOnBreadCrumbClickListener; private OnBreadCrumbClickListener mOnBreadCrumbClickListener; private int mGravity; private static final int DEFAULT_GRAVITY = Gravity.START | Gravity.CENTER_VERTICAL; /** /** * Interface to intercept clicks on the bread crumbs. * Interface to intercept clicks on the bread crumbs. */ */ Loading Loading @@ -80,6 +86,14 @@ public class FragmentBreadCrumbs extends ViewGroup public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) { public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FragmentBreadCrumbs, defStyle, 0); mGravity = a.getInt(com.android.internal.R.styleable.FragmentBreadCrumbs_gravity, DEFAULT_GRAVITY); a.recycle(); } } /** /** Loading Loading @@ -159,16 +173,50 @@ public class FragmentBreadCrumbs extends ViewGroup @Override @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { protected void onLayout(boolean changed, int l, int t, int r, int b) { // Eventually we should implement our own layout of the views, // Eventually we should implement our own layout of the views, rather than relying on // rather than relying on a linear layout. // a single linear layout. final int childCount = getChildCount(); final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { if (childCount == 0) { final View child = getChildAt(i); return; } final View child = getChildAt(0); int childRight = mPaddingLeft + child.getMeasuredWidth() - mPaddingRight; final int childTop = mPaddingTop; int childBottom = mPaddingTop + child.getMeasuredHeight() - mPaddingBottom; final int childBottom = mPaddingTop + child.getMeasuredHeight() - mPaddingBottom; child.layout(mPaddingLeft, mPaddingTop, childRight, childBottom); int childLeft; int childRight; final int layoutDirection = getLayoutDirection(); final int horizontalGravity = mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK; switch (Gravity.getAbsoluteGravity(horizontalGravity, layoutDirection)) { case Gravity.RIGHT: childRight = mRight - mLeft - mPaddingRight; childLeft = childRight - child.getMeasuredWidth(); break; case Gravity.CENTER_HORIZONTAL: childLeft = mPaddingLeft + (mRight - mLeft - child.getMeasuredWidth()) / 2; childRight = childLeft + child.getMeasuredWidth(); break; case Gravity.LEFT: default: childLeft = mPaddingLeft; childRight = childLeft + child.getMeasuredWidth(); break; } } if (childLeft < mPaddingLeft) { childLeft = mPaddingLeft; } if (childRight > mRight - mLeft - mPaddingRight) { childRight = mRight - mLeft - mPaddingRight; } child.layout(childLeft, childTop, childRight, childBottom); } } @Override @Override Loading
core/res/res/values/attrs.xml +6 −0 Original line number Original line Diff line number Diff line Loading @@ -5781,4 +5781,10 @@ <attr name="leftToRight" format="boolean" /> <attr name="leftToRight" format="boolean" /> </declare-styleable> </declare-styleable> <!-- Attributes that can be used with <code><FragmentBreadCrumbs></code> tags. --> <declare-styleable name="FragmentBreadCrumbs"> <attr name="gravity" /> </declare-styleable> </resources> </resources>