Onaltılık renk değerini (#ffffff) tam sayı değerine dönüştür


89

Bir sunucudan onaltılık renk değerleri alıyorum (bu formda #xxxxxx, örneğin #000000siyah için)

Bunu bir tamsayı değerine nasıl dönüştürebilirim?

Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))Daha da hextastik bir 0x000000sonuç elde etmek için yapmayı denedim , ancak bu intburada bir başka öneri olarak yorumlanmadı?

Bir hata alıyorum: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

setBackgroundColor(int color)Tahmin edebileceğiniz gibi tam sayı renk değeri alan işlevleri için Android SDK kullanıyorum .

Bu sorunun KARŞILIĞI şudur: Android'de bir renk tamsayısını onaltılık bir String'e nasıl dönüştürebilirim?


Bazı nedenlerden dolayı gönderemiyorum ... Neredeyse oradasınız, ancak valueOfdize girdisini (elbette # olmadan) ve tabanı belirten tabanı belirlediğiniz iki bağımsız değişken yöntemine ihtiyacınız var . Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Bu, herhangi bir tamsayı tabanıyla yapılabilir! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

Evet, cevabımı da gönderemedim. Mike Samuel, söyleyeceğim şeyi hemen hemen söyledi.
16'da satış yapın

Yanıtlar:


184

Gerçek cevap kullanmaktır:

Color.parseColor(myPassedColor)Android'de, myPassedColorvarlık hexgibi değer #000veya #000000veya #00000000.

Ancak, bu işlev kestirme heks değeri desteklemez gibi #000.


9
Maalesef in gibi bir değer ayrıştırmıyor #000. Belgelere
Alex Semeniuk

@CQM gibi, kısaltılmış onaltılık renk nasıl ayrıştırılır #ccc. Başka bir yolu var mı?
Kavita_p

32

Cevap gerçekten basit çocuklar, android'de onaltılık rengi int'e dönüştürmek istiyorsanız, sadece android Renk sınıfını kullanın , örneğin aşağıda gösterildiği gibi

bu açık gri renk için

Color.parseColor("#a8a8a8");

İşte bu ve sonucunu alacaksın.


Ve nasıl kullanılacağını netleştirin: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

2
öneri için teşekkürler, bunu şimdi boşuna denedim ve ortaya çıkan Android işlevi, ikisi de int döndürmesine rağmen çalışan tek renk sonucuydu. Color.parseColor (myPassedColor)) Bunun android'e özgü bir sorun olduğunu düşünmemiştim, ancak şu çıktı
CQM

4
İnsanların bunu neden desteklediğini bilmiyorum; çalışmıyor !! Buradaki renkler 32 bit olarak saklanıyor, bu yüzden onları yazdırmak uzun süre görünmesini sağlıyor. parseInt, bir negatifi belirtmek için açık bir `- 'arar ve inçler veya uzunlar için işaret bitine saygı göstermez. Böylece yanlış numara verecektir.
Christian Chapman

1
@enthdegree, OP'den alıntı yapmak gerekirse, "Bir sunucudan onaltılık renk değerleri alıyorum (bu biçimde, #xxxxxx" böylece OP'nin ilgilendiği renkler 32 bit değil 24 bittir; alfa kanalı yoktur.
Mike Samuel

1
@AllDayAmazing, '#' bir onaltılık basamak, işaret veya ondalık ayırıcı değildir, bu nedenle parseIntgirişte bulursa başarısız olur.
Mike Samuel

Benim hatam, yaptığım şeye o kadar kök salmışım ki çabucak okudum ve gördüm parseColor(). Çok haklısın
AllDayAmazing

7

Formda bir renk bulduğum problemin aynısını yaşıyorum #AAAAAAve bunu android'in kullanabileceği bir forma dönüştürmek istiyorum. 0xFFAAAAAAAndroid'in rengi otomatik olarak söyleyebilmesi için kullanabileceğinizi öğrendim . FFİlkinin alphadeğer anlattığına dikkat edin . Umarım yardımcı olur


4

Gerçek cevap, bu en basit ve en kolay ...

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

3

Ben de aynı problemle karşı karşıyaydım. Bu şekilde çözebildim. CQM'nin dediği gibi, Color.parseColor () kullanmak bu sorun için iyi bir çözümdür.

İşte kullandığım kod:

this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));

Bu durumda hedefim, Tercihlerimden (color_prefs) renk seçimini değiştirdiğimde Button'ın metin rengini (Button_C) değiştirmekti.


1

Dayanarak CQM 'ın cevabı ve üzerinde ovokerie-ogbeta ' ın başka sorunun cevabı bu çözüm buluyor ettik:

if (colorAsString.length() == 4) { // #XXX
    colorAsString = colorAsString.replaceAll("#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])", "#$1$1$2$2$3$3");
}

int color = Color.parseColor(colorAsString);

1

String'de Paylaşılan Tercihler Renk Kodunu Alın ve ardından tam sayıya dönüştürün ve düzen-arka plan rengi ekleyin:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));

0

Bunu deneyin, kaynağınızda çekilebilir oluşturun ...

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/white"/>
    <size android:height="20dp"
        android:width="20dp"/>
</shape>

sonra kullan...

 Drawable mDrawable = getActivity().getResources().getDrawable(R.drawable.bg_rectangle_multicolor);
mDrawable.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_IN);
mView1.setBackground(mDrawable);

renkli ... "#FFFFFF"

renk şeffafsa şunu kullanın ... setAlpha

mView1.setAlpha(x); x float ile 0-1 Ej (0.9f)

İyi şanslar

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.