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.