我需要得到一个重力的价值LinearLayout.我检查了文档,我只找到了如何设置它(setGravity(value)).任何人都知道是否有办法获得LinearLayout引力?
谢谢
我自己没有尝试过,但从逻辑上讲,它应该可行.
问题是变量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;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所知,调用getGravityVal()自定义LinearLayout将获得重力信息.
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |