แปลงค่าสีฐานสิบหก (#ffffff) เป็นค่าจำนวนเต็ม


89

ฉันได้รับค่าสีฐานสิบหกจากเซิร์ฟเวอร์ (ในรูปแบบนี้#xxxxxxเช่น#000000สีดำ)

ฉันจะแปลงค่านี้เป็นค่าจำนวนเต็มได้อย่างไร

ฉันพยายามทำInteger.valueOf("0x" + passedColor.substring(1, passedColor.length()))เพื่อให้ได้0x000000ผลลัพธ์ที่แตกต่างกันมากขึ้นแต่นี่ไม่ได้เป็นintข้อเสนอแนะอื่นใด

ฉันได้รับข้อผิดพลาด: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

ฉันใช้ Android SDK สำหรับsetBackgroundColor(int color)ฟังก์ชั่นซึ่งใช้เวลา - อย่างที่คุณคาดเดา - ค่าสีจำนวนเต็ม

นี่คือ OPPOSITE ของคำถามนี้: จะแปลงจำนวนเต็มสีเป็น hex String ใน Android ได้อย่างไร?


ด้วยเหตุผลบางอย่างที่ฉันไม่สามารถโพสต์ได้ ... คุณเกือบจะอยู่ที่นั่นแล้ว แต่คุณต้องการวิธีการสองอาร์กิวเมนต์valueOfที่คุณระบุอินพุตสตริง (โดยไม่ต้อง # แน่นอน) และรัศมีซึ่งระบุฐาน Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) สามารถทำได้ด้วยฐานจำนวนเต็ม! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

ใช่ฉันไม่สามารถโพสต์คำตอบของฉันได้เช่นกัน ไมค์ซามูเอลพูดในสิ่งที่ฉันกำลังจะพูด
ssell

คำตอบ:


184

คำตอบที่แท้จริงคือการใช้:

Color.parseColor(myPassedColor)ใน Android ของmyPassedColorการเป็นhexเช่นค่า#000หรือหรือ#000000#00000000

อย่างไรก็ตามฟังก์ชันนี้ไม่รองรับค่าฐานสิบหกแบบชวเลขเช่น#000.


9
ขออภัยในไม่ได้แยกวิเคราะห์ค่าเช่น#000. ดูเอกสาร
Alex Semeniuk

@CQM วิธีการแยกวิเคราะห์สีฐานสิบหกชวเลขเช่น#ccc. มีวิธีอื่น ๆ ?
Kavita_p

32

คำตอบนั้นง่ายมากสำหรับ Android หากคุณต้องการแปลงสีฐานสิบหกเป็น int เพียงแค่ใช้คลาสสีของ Android ตัวอย่างที่แสดงด้านล่าง

สำหรับสีเทาอ่อน

Color.parseColor("#a8a8a8");

เพียงเท่านี้คุณก็จะได้ผลลัพธ์


และอธิบายวิธีใช้ให้ชัดเจน: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

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

2
ขอบคุณสำหรับข้อเสนอแนะฉันลองทำตอนนี้แล้วก็ไม่เกิดประโยชน์ใด ๆ และปรากฎว่าฟังก์ชัน Android ที่ให้มานั้นเป็นผลลัพธ์สีชนิดเดียวที่ใช้งานได้แม้ว่าทั้งคู่จะกลับมา Color.parseColor (myPassedColor)) ฉันไม่คิดว่านี่เป็นปัญหาเฉพาะของ Android แต่ปรากฎว่ามันเป็น
CQM

4
ฉันไม่รู้ว่าทำไมคนถึงโหวตเรื่องนี้ มันใช้ไม่ได้ !! สีที่นี่จะถูกเก็บไว้ใน 32 บิตดังนั้นการพิมพ์จึงทำให้แสดงผลได้นาน parseInt มองหา "-" ที่ชัดเจนเพื่อแสดงถึงค่าลบและไม่เคารพบิตเครื่องหมายสำหรับ ints หรือ longs ดังนั้นจะให้หมายเลขผิด
Christian Chapman

1
@enthdegree หากต้องการอ้างอิง OP "ฉันได้รับค่าสีฐานสิบหกจากเซิร์ฟเวอร์ (ในรูปแบบนี้ #xxxxxx" ดังนั้นสีที่ OP เกี่ยวข้องคือ 24 บิตไม่ใช่ 32 บิตไม่มีช่องอัลฟา
ไมค์ซามูเอล

1
@AllDayAmazing '#' ไม่ใช่เลขฐานสิบหกเครื่องหมายหรือตัวคั่นทศนิยมดังนั้นparseIntจะล้มเหลวหากพบในอินพุต
Mike Samuel

parseColor()ความผิดพลาดของฉันฉันฝังแน่นดังนั้นในสิ่งที่ฉันทำที่ฉันอ่านมันได้อย่างรวดเร็วและเลื่อย คุณมีความถูกต้องมาก
AllDayAmazing

7

ฉันมีปัญหาเดียวกันกับที่ฉันพบสีบางรูปแบบ#AAAAAAและฉันต้องการแปลงเป็นรูปแบบที่ Android สามารถใช้ประโยชน์ได้ ฉันพบว่าคุณสามารถใช้0xFFAAAAAAเพื่อให้ android บอกสีโดยอัตโนมัติ ข้อสังเกตประการแรกFFคือการบอกalphaค่า หวังว่าจะช่วยได้



3

ฉันกำลังเผชิญกับปัญหาเดียวกัน วิธีนี้ฉันสามารถแก้ไขได้ ดังที่ CQM กล่าวว่าการใช้ Color.parseColor () เป็นวิธีแก้ปัญหาที่ดีสำหรับปัญหานี้

นี่คือรหัสที่ฉันใช้:

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

ในกรณีนี้เป้าหมายของฉันคือเปลี่ยนสีข้อความของปุ่ม (Button_C) เมื่อฉันเปลี่ยนการเลือกสีจากค่ากำหนดของฉัน (color_prefs)



1

รับรหัสสีการตั้งค่าที่ใช้ร่วมกันในสตริงจากนั้นแปลงเป็นจำนวนเต็มและเพิ่มสีพื้นหลังเค้าโครง:

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

0

ลองสิ่งนี้สร้างที่ดึงได้ในทรัพยากรของคุณ ...

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

จากนั้นใช้ ...

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

ด้วยสี ... "#FFFFFF"

ถ้าสีโปร่งใสให้ใช้ ... setAlpha

mView1.setAlpha(x); ด้วย x ลอย 0-1 Ej (0.9f)

โชคดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.