วิธีรับสีจากสตริงสีฐานสิบหก


305

ฉันต้องการใช้สีจากสตริง hexa เช่น"#FFFF0000"to (พูด) เปลี่ยนสีพื้นหลังของ Layout Color.HSVToColorดูเหมือนว่าผู้ชนะ แต่มันจะfloat[]เป็นพารามิเตอร์

ฉันใกล้จะแก้ปัญหาได้ไหม?


มีความเป็นไปได้ที่ซ้ำกันของการแปลงสตริงสี android ใน runtime เป็น int
Shubham A.

คำตอบ:


592

ลองColorวิธีการเรียน:

public static int parseColor (String colorString)

จากเอกสาร Android :

รูปแบบที่รองรับคือ: #RRGGBB #AARRGGBB 'สีแดง', 'สีฟ้า', 'สีเขียว', 'สีเขียว', 'สีขาว', 'สีขาว', 'สีเทา', 'สีฟ้า', 'สีฟ้า', 'สีเหลือง', 'สีแสง' '


4
ใครรู้วิธีการแยก#000ค่า?
Alex Semeniuk

6
ใช่เพียงแค่: if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) }โปรดแก้ไขฉันหากฉันผิด
xdevs23

6
ในการเพิ่มโค้ด @ xdevs23 ให้เปลี่ยนเงื่อนไข if เป็นดังนี้:if(colorString.length() == 4 && colorString[0] == '#')
Zac

คำตอบของคุณจะดีกว่าถ้าคุณไม่เพียง แต่แสดงฟังก์ชั่นเท่านั้น แต่ยังใช้งานได้อย่างไร: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Yvonne Marggraf

int red = colorString.charAt (1) == '0' หรือไม่ 0: 255; int blue = colorString.charAt (2) == '0' หรือไม่ 0: 255; int green = colorString.charAt (3) == '0' หรือไม่ 0: 255; Color.rgb (แดง, น้ำเงิน, เขียว);
GTID

253

ลอง:

myLayout.setBackgroundColor(Color.parseColor("#636161"));

4
หากคุณใช้ xamarin .. รหัสนี้เป็น Android.Graphics.Color.ParseColor ("# 636161") ด้วย "P" ถึงตอนบน
Igor Monteiro

38

คำถามนี้เกิดขึ้นจากการค้นหาจำนวนหนึ่งที่เกี่ยวข้องกับสีหกเหลี่ยมดังนั้นฉันจะเพิ่มการสรุปที่นี่

สีจาก int

สีฐานสิบหกใช้แบบฟอร์มRRGGBBหรือAARRGGBB(อัลฟา, แดง, เขียว, น้ำเงิน) จากประสบการณ์ของผมเมื่อใช้intโดยตรงคุณจำเป็นต้องใช้เต็มAARRGGBBรูปแบบ หากคุณมีRRGGBBแบบฟอร์มเพียงให้ใส่คำนำหน้าด้วยFFเพื่อทำให้ตัวอักษรทึบ (ทึบ) ทึบ นี่คือวิธีที่คุณจะตั้งค่าในรหัส การใช้0xที่จุดเริ่มต้นหมายความว่ามันเป็นเลขฐานสิบหกและไม่ใช่ฐาน 10

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);

สีจากสตริง

อย่างที่คนอื่นสังเกตคุณสามารถใช้Color.parseStringมันได้

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);

โปรดทราบว่า String #ต้องเริ่มต้นด้วย รองรับทั้งรูปแบบRRGGBBและAARRGGBB

สีจาก XML

คุณควรได้รับสีของคุณจาก XML เมื่อทำได้ นี่คือตัวเลือกที่แนะนำเนื่องจากทำให้การเปลี่ยนสีในแอพของคุณง่ายขึ้น หากคุณตั้งค่าสีหกเหลี่ยมจำนวนมากตลอดทั้งรหัสของคุณมันเป็นความเจ็บปวดครั้งใหญ่ที่จะลองเปลี่ยนในภายหลัง

การออกแบบวัสดุ Android มีเพดานสีพร้อมค่าฐานสิบหกที่กำหนดค่าไว้แล้ว

สีของชุดรูปแบบเหล่านี้ถูกใช้ในแอพของคุณและมีลักษณะดังนี้:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

หากคุณต้องการสีเพิ่มเติมแนวทางปฏิบัติที่ดีที่ควรปฏิบัติคือการกำหนดสีของคุณในสองขั้นตอนเป็น xml ชื่อสีค่าฐานสิบหกจากนั้นตั้งชื่อองค์ประกอบของแอปของคุณที่ควรได้รับสีที่แน่นอน ทำให้ง่ายต่อการปรับสีในภายหลัง อีกครั้งนี้อยู่ในcolors.xml

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

จากนั้นเมื่อคุณต้องการตั้งค่าสีในรหัสให้ทำดังต่อไปนี้:

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);

สีที่กำหนดไว้ล่วงหน้าของ Android

คลาส Color มาพร้อมกับค่าคงที่สีที่กำหนดไว้ล่วงหน้าจำนวนหนึ่ง คุณสามารถใช้มันได้เช่นนี้

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);

สีอื่น ๆ

  • Color.BLACK
  • Color.BLUE
  • Color.CYAN
  • Color.DKGRAY
  • Color.GRAY
  • Color.GREEN
  • Color.LTGRAY
  • Color.MAGENTA
  • Color.RED
  • Color.TRANSPARENT
  • Color.WHITE
  • Color.YELLOW

หมายเหตุ


22

แปลงสตริงนั้นเป็นintสีที่สามารถใช้ในsetBackgroundColorและsetTextColor

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

16 หมายความว่ามันเป็นเลขฐานสิบหกไม่ใช่ 0-9 ปกติของคุณ ผลลัพธ์ควรตรงกับ

int color = 0xFFFF0000;

ฉันจะแปลง String color = "80000000" ได้อย่างไร; เพื่อ int color =?
Ashish Sahu

ผมคิดว่ารุ่นสตริงสิ่งใดที่จะเป็น#80000000ในกรณีที่รุ่น int int color = 0x80000000;จะเป็น หากยังไม่ได้ผลให้โพสต์คำถามใหม่พร้อมรายละเอียดเพิ่มเติมเพื่อให้ผู้คนมากกว่าฉันจะสังเกตเห็น โปรดทราบว่า#80000000เป็นสีดำโปร่งแสง
ไบรอันฟิลด์

ฉันรู้ว่า int จะเป็น int color = 0x80000000 แต่ปัญหาของฉันคือวิธีการแปลง ... แต่ตอนนี้ฉันจะแก้ไขปัญหาด้วยตนเองด้วย int color = parseColor ("#" + "80000000"); ... ขอบคุณสำหรับการตอบกลับ
Ashish Sahu

ฉันได้รับข้อยกเว้นโดยใช้รหัสของคุณ: java.lang.NumberFormatException: int ไม่ถูกต้อง: "FFFF0000"
ข้อผิดพลาด 1337



12

ฉันใช้สิ่งนี้และมันใช้งานได้ดีสำหรับฉันในการตั้งค่าสีที่ฉันต้องการ

public static final int MY_COLOR = Color.rgb(255, 102, 153);

ตั้งค่าสีโดยใช้ 0-255 สำหรับแต่ละสีแดงสีเขียวและสีน้ำเงินจากนั้นทุกที่ที่คุณต้องการให้สีนั้นใส่ MY_COLOR แทน Color.BLUE หรือ Color.RED หรือสีคงที่อื่น ๆ ที่คลาส Color เสนอ

เพียงแค่ทำการค้นหาแผนภูมิสีของ Google และคุณสามารถค้นหาแผนภูมิด้วยรหัส RGB ที่ถูกต้องโดยใช้ 0-255



6

บันทึกไฟล์ XML ไว้ที่ res / values ​​/ colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

รหัสแอปพลิเคชันนี้รับทรัพยากรสี:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

เค้าโครง XML นี้ใช้สีกับแอตทริบิวต์:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

5

ลองใช้ 0xFFF000 แทนและส่งผ่านไปยังวิธีการ Color.HSVToColor


2
ฉันคาดหวังว่าคุณควรแทนที่ F ที่สามด้วยศูนย์ ใน OP ฉันคิดว่าตัวละคร F สองตัวแรกถูกใช้เพื่อกำหนดความทึบ
Bryan Field

4

หากคุณกำหนดสีใน XML ของคุณและต้องการใช้เพื่อเปลี่ยนสีพื้นหลังหรือสิ่งที่ API นี้เป็นสีที่คุณกำลังมองหา:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

ในตัวอย่างของฉันฉันใช้สำหรับ TestView


0

สำหรับรหัส Hex ที่สั้นลง

int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.