1

整数値をコンテンツの配置に変換しようとしています。整数は、水平方向と垂直方向の両方の配置を同時に保持できます。

最初に、すべての可能性を説明する列挙型を作成しました (Android Gravity クラスの値を使用する必要があります: http://developer.android.com/reference/android/view/Gravity.html )

typedef enum{
    GravityHorizontalCenter         = 1,    // (0x00000001) 
    GravityLeft                     = 2,    // (0x00000002) 
    GravityRight                    = 5,    // (0x00000005) 
    GravityVerticalCenter           = 16,   // (0x00000010) 
    GravityTop                      = 48,   // (0x00000030) 
    GravityBottom                   = 80,   // (0x00000050) 
} GravityType;

53もそうint alignment = GravityRight | GravityTopでしょう。

次のようにビューオブジェクトの配置を確認したい:

if ((textAlignment & GravityHorizontalCenter) == GravityHorizontalCenter){

    return NSTextAlignmentCenter;
}...

textAlignment & GravityHorizontalCenter) == GravityHorizontalCenterしかし、53 の場合、if ステートメントが を返すため、何かが欠けているようですTrue

4

2 に答える 2

1

これらの値は、ビット フラグ (マスク) として使用するのに適していないためです。

&魔法ではありません - それは単なるビットAND演算子です。そしてAND、 で数値をビット単位で計算1し、結果を と比較すると、1最下位ビットが元の数値に設定されているかどうか、つまり奇数であったかどうかのみがチェックされます。したがって、(textAlignment & GravityHorizontalCenter) == GravityHorizontalCenter任意の奇数に対して true が生成されます。

数値をフラグとして使用する場合は、次のように 2 の異なる累乗にする必要があります。

GravityHorizontalCenter         = 1,
GravityLeft                     = 2,
GravityRight                    = 4,
GravityVerticalCenter           = 8,
GravityTop                      = 16,
GravityBottom                   = 32,
于 2013-06-07T13:12:28.130 に答える