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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…