Merge "Holo fixes"
This commit is contained in:
@ -26,6 +26,24 @@ import android.view.ViewGroup;
|
||||
public class ButtonGroup extends LinearLayout {
|
||||
private Drawable mDivider;
|
||||
private Drawable mButtonBackground;
|
||||
private int mShowDividers;
|
||||
|
||||
/**
|
||||
* Don't show any dividers.
|
||||
*/
|
||||
public static final int SHOW_DIVIDER_NONE = 0;
|
||||
/**
|
||||
* Show a divider at the beginning of the group.
|
||||
*/
|
||||
public static final int SHOW_DIVIDER_BEGINNING = 1;
|
||||
/**
|
||||
* Show dividers between each item in the group.
|
||||
*/
|
||||
public static final int SHOW_DIVIDER_MIDDLE = 2;
|
||||
/**
|
||||
* Show a divider at the end of the group.
|
||||
*/
|
||||
public static final int SHOW_DIVIDER_END = 4;
|
||||
|
||||
public ButtonGroup(Context context) {
|
||||
this(context, null);
|
||||
@ -39,34 +57,89 @@ public class ButtonGroup extends LinearLayout {
|
||||
super(context, attrs, defStyleRes);
|
||||
|
||||
TypedArray a = context.obtainStyledAttributes(attrs,
|
||||
com.android.internal.R.styleable.ButtonGroup);
|
||||
com.android.internal.R.styleable.ButtonGroup, defStyleRes, 0);
|
||||
|
||||
mDivider = a.getDrawable(com.android.internal.R.styleable.ButtonGroup_divider);
|
||||
mButtonBackground = a.getDrawable(
|
||||
com.android.internal.R.styleable.ButtonGroup_buttonBackground);
|
||||
mShowDividers = a.getInt(com.android.internal.R.styleable.ButtonGroup_showDividers,
|
||||
SHOW_DIVIDER_MIDDLE);
|
||||
a.recycle();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set how dividers should be shown between items in this button group.
|
||||
*
|
||||
* @param showDividers One or more of {@link #SHOW_DIVIDER_BEGINNING},
|
||||
* {@link #SHOW_DIVIDER_MIDDLE}, or {@link #SHOW_DIVIDER_END},
|
||||
* or {@link #SHOW_DIVIDER_NONE} to show no dividers.
|
||||
*/
|
||||
public void setShowDividers(int showDividers) {
|
||||
mShowDividers = showDividers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return A flag set indicating how dividers should be shown around items.
|
||||
* @see #setShowDividers(int)
|
||||
*/
|
||||
public int getShowDividers() {
|
||||
return mShowDividers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addView(View child, int index, ViewGroup.LayoutParams params) {
|
||||
if (getChildCount() > 0) {
|
||||
super.addView(makeDividerView(), index, makeDividerLayoutParams());
|
||||
if (index >= 0) {
|
||||
index++;
|
||||
if (!hasDividerBefore(index)) {
|
||||
if (((getChildCount() > 0
|
||||
&& (mShowDividers & SHOW_DIVIDER_MIDDLE) == SHOW_DIVIDER_MIDDLE)
|
||||
|| (mShowDividers & SHOW_DIVIDER_BEGINNING) == SHOW_DIVIDER_BEGINNING)) {
|
||||
super.addView(new DividerView(mContext), index, makeDividerLayoutParams());
|
||||
if (index >= 0) {
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Preserve original padding as we change the background
|
||||
final int paddingLeft = child.getPaddingLeft();
|
||||
final int paddingRight = child.getPaddingRight();
|
||||
final int paddingTop = child.getPaddingTop();
|
||||
final int paddingBottom = child.getPaddingBottom();
|
||||
child.setBackgroundDrawable(mButtonBackground);
|
||||
child.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
|
||||
|
||||
final boolean isLast = index < 0 || index == getChildCount();
|
||||
super.addView(child, index, params);
|
||||
|
||||
if (index >= 0) {
|
||||
index++;
|
||||
}
|
||||
if ((isLast && (mShowDividers & SHOW_DIVIDER_END) == SHOW_DIVIDER_END) ||
|
||||
((mShowDividers & SHOW_DIVIDER_MIDDLE) == SHOW_DIVIDER_MIDDLE &&
|
||||
!(getChildAt(index) instanceof DividerView))) {
|
||||
super.addView(new DividerView(mContext), index, makeDividerLayoutParams());
|
||||
}
|
||||
}
|
||||
|
||||
private ImageView makeDividerView() {
|
||||
ImageView result = new ImageView(mContext);
|
||||
result.setImageDrawable(mDivider);
|
||||
result.setScaleType(ImageView.ScaleType.FIT_XY);
|
||||
return result;
|
||||
private boolean hasDividerBefore(int index) {
|
||||
if (index == -1) {
|
||||
index = getChildCount();
|
||||
}
|
||||
index--;
|
||||
if (index < 0) {
|
||||
return false;
|
||||
}
|
||||
return getChildAt(index) instanceof DividerView;
|
||||
}
|
||||
|
||||
private LayoutParams makeDividerLayoutParams() {
|
||||
return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
||||
}
|
||||
|
||||
private class DividerView extends ImageView {
|
||||
public DividerView(Context context) {
|
||||
super(context);
|
||||
setImageDrawable(mDivider);
|
||||
setScaleType(ImageView.ScaleType.FIT_XY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user