Android, rengi dize değeri olarak alır


104

Kaynaklarda bir renk tanımladıysam

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

rengini kimliğine göre ayarlamak mümkündür, örneğin

view.setTextColor(R.color.someColor);

Colors.xml'den de color string değeri almak mümkün müdür?

Gibi bir şey

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

Cevabınız evet ise, örnek verebilir misiniz?

teşekkür ederim

Yanıtlar:


151

Bu senin cevabın

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

Alacaksın

 colorStr = "#123456"

5
önce teşekkür ederim. Renkler için getString kullanmayı düşünmemiştim. Çalışıyor, ancak colorStr = "# 123456" yerine "# ff123456" alıyorum ve bu hoş değil :(
— Tima

7
Alpha'yı kaldırmak için döndürülen renk dizesinin basit bir alt dizesi. getResources (). getString (R.color.my_colour) .substring (3);
— scottyab

82
Bu artık çalışmıyor, 'String türünde beklenen kaynak' hatası
— Clive Jefferies 15

21
@CliveJefferies Ekstrenizin //noinspection ResourceTypehemen üstüne ekleyebilirsiniz .
— lordmegamax

15
getResources().getString(0+R.color.someColor);works
— 18446744073709551615

140

Sırf kolay copypasta uğruna:

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

Veya şeffaflık olmadan isterseniz:

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

8
Bu harika çalıştı, ancak '#' + Integer.toHexString(getResources().getColor(R.color.someColor);daha sonra onu kullanıyorumColor.parseColor
— gattsbr

4
geColor () need api> 23
— Honghe.Wu

1
Kullanımdan kaldırılmış getColor () 'u sorunsuz kullanabilirsiniz. Sadece "getColor (...)" öğesini silin ve tekrar yazın, yöntem çağrısını Android kullanım dışı getColor çağrısıyla tamamlamak için intellisense kullanın ve iyisiniz.
— Wes Winn

Integer.toHexString (ContextCompat.getColor (bağlam, R.color.black) & 0x00ffffff);
— AITAALI_ABDERRAHMANE

8
Hex renginin başında 0 varsa bu çalışmaz.
— asish

26

Yukarıda verilen cevaplar güncellenmez.

Lütfen bunu deneyin

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

24

Integer.toHexString()Onaltılık dizenizde baştaki sıfırlar varsa , buradaki tüm çözümler break kullanır . Gibi renkler #0affffsonuçlanır #affff. Bunun yerine şunu kullanın:

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

veya alfa ile:

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

9

Neden getResources().getColorapi> 23'e ihtiyaç duyuyor. Yani bu daha iyi: Sadece kolay kopyala ve yapıştır uğruna:

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

Veya şeffaflık olmadan istiyorsanız:

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


ContextCompat.getColor3 argüman almıyor
— Nashe

@Nashe 2 argüman, 3 değil!
— Behrouz.

4

21'in üzerindeki API için kullanabilirsiniz

getString(R.color.color_name);

Bu, rengi bir dize biçiminde döndürür. Bunu tam sayı biçiminde bir renge dönüştürmek için (bazen yalnızca tam sayılar kabul edilir) sonra:

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

Yukarıdaki ifade, color.xml dosyasında tanımlanan rengin tamsayı eşdeğerini döndürür


2

Bir hata oluşursa @SuppressLint ("ResourceType") ekleyin. Körük gibi.

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>";
    }

2

Benim için çalışıyor!

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

1

Bunun için standart bir işlevsellik olduğunu düşünmüyorum. Bununla birlikte, dönüş değerini getColor()onaltılıktan ve onaltılık değeri dizeye çevirebilirsiniz.

onaltılık 123456 = int 1193046;


1

Ben böyle yaptım:

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

-4

ContextCompatVeya kullanmak istemiyorsanız SuppressLint, stringhemen altına bir kaynak ekleyin color.

Onun yerine

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

Kullanım

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

Kodunuz daha fazla tekrarlanıyor ama çok daha temiz. Ayrıca, stringsonradan değiştirmeyi unutmak, yan coloryana oldukları için neredeyse imkansızdır.


çoğaltma her zaman kötü bir fikirdir
— Lukasz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.