package android.widget; import java.awt.Container; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.SpringLayout; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; public class LinearLayout extends ViewGroup { public LinearLayout(Context context) { super(context); } public static class LayoutParams extends ViewGroup.MarginLayoutParams { public LayoutParams(int width, int height) { super(width, height); } public LayoutParams(Context c, AttributeSet attrs) { super(c, attrs); } public int gravity; public float weight; } public void setLayoutParams(ViewGroup.LayoutParams layoutParams) { super.setLayoutParams(layoutParams); } public static final int HORIZONTAL = 0; public static final int VERTICAL = 1; int orientation = VERTICAL; public int getOrientation() { return orientation; } public void setOrientation(int orientation) { this.orientation = orientation; } @Override public Container getContainer() { Container container = super.getContainer(); if (!(container.getLayout() instanceof BoxLayout)) container.setLayout( new BoxLayout(container, orientation == HORIZONTAL ? BoxLayout.X_AXIS : BoxLayout.Y_AXIS)); return container; } public BoxLayout getLayout() { return (BoxLayout) getContainer().getLayout(); } @Override public Container doLayout() { return getContainer(); } @Override public void doLayout(View view) { ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); if (layoutParams instanceof MarginLayoutParams) { MarginLayoutParams margs = (MarginLayoutParams) layoutParams; BoxLayout boxLayout = getLayout(); int axis = boxLayout.getAxis(); Box outerBox = new Box(axis); outerBox.add(margs.strutsOuterFirst(axis)); Box innerBox = axis == BoxLayout.X_AXIS ? Box.createVerticalBox() : Box.createHorizontalBox(); innerBox.add(margs.strutsInnerFirst(axis)); innerBox.add(view.getComponent()); innerBox.add(margs.strutsInnerLast(axis)); outerBox.add(innerBox); outerBox.add(margs.strutsOuterLast(axis)); view.setComponent(outerBox); } } }