Получить LinearLayout Gravity
Мне нужно было получить значение силы тяжести LinearLayout
, Я проверил документацию и нашел только как ее установить (setGravity(value)
). Кто-нибудь знает, есть ли способ получить LinearLayout
сила тяжести?
Спасибо
3 ответа
Я не пробовал это сам, но по логике, это должно работать.
Проблема в том, что переменная mGravity
(который содержит информацию о текущей гравитации для LinearLayout) private
, И нет никаких методов доступа, чтобы предоставить вам доступ к нему.
Одним из способов решения этой проблемы было бы использование Reflection API.
Другим (и намного более чистым) способом было бы расширить LinearLayout
и переопределить setGravity(int)
, Например, вот так:
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;
}
}
Как вы можете сказать, позвонив getGravityVal()
на заказ LinearLayout
даст вам информацию о гравитации.
API> = 24
getGravity ()
https://developer.android.com/reference/android/widget/LinearLayout.html
API < 24
используя отражение:
int gravity = -1;
try {
final Field staticField = LinearLayout.class.getDeclaredField("mGravity");
staticField.setAccessible(true);
gravity = staticField.getInt(linearLayout);
//Log.i("onFinishInflate", gravity+"");
}
catch (NoSuchFieldException e) {}
catch (IllegalArgumentException e) {}
catch (IllegalAccessException e) {}
Вы должны получить это от LayoutParams LinearLayout:
mLinearLayout.getLayoutParams().gravity
@ см. документ LinearLayout.LayoutParams:
public int gravity Gravity for the view associated with these LayoutParams.