Androidは文字列値として色を取得します


104

リソースで色を定義した場合

<resources>
    <color name="someColor">#123456</color>
</resources>

次のように、IDで色を設定することができます

view.setTextColor(R.color.someColor);

colors.xmlからカラー文字列値を取得することもできますか?

何かのようなもの

colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"

はいの場合、誰かが例を挙げられますか?

ありがとうございました

回答:


151

これがあなたの答えです

colorStr=getResources().getString(R.color.someColor);

あなたが得るでしょう

 colorStr = "#123456"

5
まず、ありがとうございます。色にgetStringを使用することは考えていませんでした。それは私が「#ff123456」そうだ、これはいい:(ではない=「#123456」動作しますが、代わりにcolorStrの
TIMA

7
Alphaを削除するために返されるカラー文字列の単純な部分文字列が機能します。getResources()。getString(R.color.my_colour).substring(3);
scottyab

82
これはもう機能していません、エラー「タイプStringの予期されたリソース」
Clive Jefferies

21
@CliveJefferies //noinspection ResourceTypeステートメントのすぐ上に追加できます。
lordmegamax 2015年

15
getResources().getString(0+R.color.someColor);作品
18446744073709551615

139

簡単なコピーパスタのために:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));

または、透明度なしでそれをしたい場合:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);

8
これはうまく機能しましたが'#' + Integer.toHexString(getResources().getColor(R.color.someColor);、後で使用するため、これを使用して変更する必要がありましたColor.parseColor
gattsbr

4
geColor()にはapi> 23が必要
Honghe.Wu '19

1
廃止予定のgetColor()を使用しても問題ありません。「getColor(...)」を削除してもう一度入力し、IntelliSenseを使用して、Androidの非推奨のgetColor呼び出しでメソッド呼び出しを完了するだけで問題ありません。
Wes Winn 2017

Integer.toHexString(ContextCompat.getColor(context、R.color.black)&0x00ffffff);
AITAALI_ABDERRAHMANE 2017年

8
16進数の色の最初に0がある場合、これは機能しません。
asish

26

上記の回答は更新されません。

これをお試し下さい

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);

23

Integer.toHexString()16進文字列に先行ゼロがある場合、ここでのすべてのソリューションは、ブレークを使用します。のような色#0affffはになり#affffます。代わりにこれを使用してください:

String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)

またはアルファ付き:

String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)

9

原因getResources().getColorapi> 23が必要です。これはより良い方法です。コピーと貼り付けを簡単にするためです。

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );

または、透明度なしでそれをしたい場合: `

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );


ContextCompat.getColor3つの引数を取らない
Nashe

@ナッシュそれは3つではなく2つの引数です!
Behrouz.M

4

21を超えるAPIの場合、使用できます

getString(R.color.color_name);

これは、文字列形式で色を返します。それを整数形式の色に変換するには(整数のみが受け入れられる場合があります):

Color.parseColor(getString(R.color.color_name));

上記の式は、color.xmlファイルで定義された色に相当する整数を返します


2

エラーが発生した場合は、@ SuppressLint( "ResourceType")を追加します。怒鳴るように。

private String formatUsernameAction(UserInfo userInfo, String action) {
        String username = userInfo.getUsername();
        @SuppressLint("ResourceType") String usernameColor = getContext().getResources().getString(R.color.background_button);
        return "<font color=\""+usernameColor+"\">" + username
                + "</font> <font color=\"#787f83\">" + action.toLowerCase() + "</font>";
    }

1

そのための標準機能はないと思います。ただし、戻り値をgetColor()から16進数に変えて、16進数値を文字列に変えることができます。

hex 123456 = int 1193046;


1

これは私がそれをした方法です:

String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);


-4

ContextCompator を使用したくない場合はSuppressLint、のstringすぐ下にリソースを追加してくださいcolor

の代わりに

<color name="text_color">#FFFFFF</color>

使用する

<color name="text_color">#FFFFFF</color>
<string name="text_color_string">#FFFFFF</string>

あなたのコードはより繰り返しになりますが、それははるかにきれいです。さらに、string変更後の更新を忘れることcolorは、それらが互いに隣接しているためほとんど不可能です。


複製は常に悪い考えです
Lukasz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.