Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get LinearLayout Gravity

Tags:

android

I was needing to get the value of the gravity of a LinearLayout. I checked the documentation and I only found how to set it ( setGravity(value) ). Anyone knows if there is a way to get a LinearLayout gravity?

Thanks

like image 686
Daniel Avatar asked Mar 03 '26 06:03

Daniel


1 Answers

I haven't tried this myself, but logically, it should work.

The problem is that the variable mGravity(that holds the current gravity info for the LinearLayout) is private. And no accessor methods exist to provide you access to it.

One way of solving this would be by using Reflection API.

Another (and much much cleaner) way would be to extend LinearLayout and override setGravity(int). For instance, like this:

public class LinearLayoutExposed extends LinearLayout {

    // Our own gravity!
    private int mGravityHolder = Gravity.START | Gravity.TOP;

    public GravLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setGravity(int gravity) {

        if (mGravityHolder != gravity) {

            // We don't want to make changes to `gravity`
            int localGravity = gravity;

            // Borrowed from LinearLayout (AOSP)
            if ((localGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) {
                localGravity |= Gravity.START;
            }

            if ((localGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {
                localGravity |= Gravity.TOP;
            }

            mGravityHolder = localGravity;
        }

        super.setGravity(gravity);
    }

    // And now, we have an accessor
    public int getGravityVal() {
        return mGravityHolder;
    }
}

As you can tell, calling getGravityVal() on the custom LinearLayout will get you the gravity info.

like image 186
Vikram Avatar answered Mar 05 '26 21:03

Vikram



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!