gpt4 book ai didi

java - 如何在自定义 Android View 中检查重力标志?

转载 作者:IT老高 更新时间:2023-10-28 23:32:44 26 4
gpt4 key购买 nike

问题

我有一个自定义的 Android View ,我希望用户在其中设置重力以便在 onDraw 中布局内容。这是我在 onDraw 中使用的简化版本:

// check gravity
if ((mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL) {
// draw the content centered vertically
} else if ((mGravity & Gravity.BOTTOM) == Gravity.BOTTOM) {
// draw the content at the bottom
}

其中 mGravity 是从 xml 属性 (like this) 获得的。

如果我将重力设置为 Gravity.CENTER_VERTICAL 它工作正常。但是我惊讶地发现,如果我将它设置为Gravity.BOTTOMGravity.CENTER_VERTICAL检查仍然是真的!

为什么会这样?

我必须查看二进制值才能了解原因:

因此,当我这样做时

mGravity = Gravity.BOTTOM;
(mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL
// (0101 & 0001) == 0001

我得到一个误报。

我该怎么办?

那么我应该如何检查重力标志?

我可以执行 if (mGravity == Gravity.CENTER_VERTICAL) 之类的操作,但我只能得到完全匹配。如果用户将重力设置为 center_vertical|right 之类的东西,那么它会失败。

最佳答案

您可以查看 FrameLayout 产下它的 child 。特别是这段代码:

final int layoutDirection = getLayoutDirection();
final int absoluteGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection);
final int verticalGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;

switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
case Gravity.CENTER_HORIZONTAL:
...
case Gravity.RIGHT:
...
case Gravity.LEFT:
...
}

switch (verticalGravity) {
case Gravity.TOP:
...
case Gravity.CENTER_VERTICAL:
...
case Gravity.BOTTOM:
...
}

Gravity 中有口罩类(class):VERTICAL_GRAVITY_MASK , HORIZONTAL_GRAVITY_MASK这将帮助您了解应用了哪些重力。

关于java - 如何在自定义 Android View 中检查重力标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42174119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com