1

TextView.setTextColor(int)入力値として 0xFFFFFFFF を使用してもまったく問題ありませんが、4294967295 に相当する 10 進数では問題ありません。

これで、その 2 番目の値が int の範囲外にある理由が完全にわかりました。私の質問は、16 進値が範囲外ではない理由です!

私が尋ねる理由は、アプリのさまざまなテキスト フィールドの色を設定するために実行時に使用する必要があるテキスト ファイルから 16 進値を読み取る状況があるからです。

Java でさまざまな文字列から int へのメソッド ( など) を試して壁にぶつかっていLong.parseLongますが、どれもうまくいきません。

文字列の 16 進値を setTextColor が満足し、正しく解釈できるものに変換する正しい方法は何ですか?

4

2 に答える 2

1

整数リテラルのさまざまな形式に対するJLSのさまざまなルールの問題です。

「int型の10進リテラルが2147483648(231)より大きい場合、または10進リテラル2147483648が単項マイナス演算子(§15.15.4)のオペランド以外の場所にある場合は、コンパイル時エラーです。」

「16進数、8進数、または2進数のintリテラルが32ビットに収まらない場合は、コンパイル時エラーになります。」

16進数、8進数、または2進数のリテラルは、負の数の2の補数表現にすることができます。

于 2013-01-14T08:05:17.127 に答える
0

たぶんColorクラスが役立ちます:

色はパックされた int として表され、4 バイト (アルファ、赤、緑、青) で構成されます。値はあらかじめ乗算されていません。つまり、透明度はアルファ コンポーネントのみに保存され、カラー コンポーネントには保存されません。コンポーネントは次のように格納されます (alpha << 24) | (赤 << 16) | (緑 << 8) | 青い。各コンポーネントの範囲は 0 ~ 255 で、0 はそのコンポーネントの寄与がないことを意味し、255 は 100% の寄与を意味します。したがって、不透明な黒は 0xFF000000 (100% 不透明ですが、赤、緑、または青からの寄与はありません) になり、不透明な白は 0xFFFFFFFF になります。

于 2013-01-14T07:59:57.300 に答える