안드로이드에서 색상 정수를 16 진수 문자열로 변환하는 방법은 무엇입니까?


197

에서 생성 된 정수가 있습니다. android.graphics.Color

정수 값은 -16776961입니다.

이 값을 #RRGGBB 형식의 16 진 문자열로 변환하는 방법

간단히 말하면 : -16776961에서 # 0000FF를 출력하고 싶습니다.

참고 : 출력에 알파가 포함되지 않도록하고 성공하지 않고이 예제 를 시도 했습니다.


16 진수 색상을 설정하려는 이유는 무엇입니까? 여기 다른 답이 있다고 생각합니다
Blundell

@Blundell 외부 응용 프로그램으로 색상을 내보내는 중입니다. 색상은 다음 형식
이어야

그렇다면 developer.android.com/reference/android/content/res/… 의 문제점은 무엇 입니까? URL을 붙여 넣거나 getColor (int)로 스크롤해야합니다.
Blundell

원시 정수를 얻고 있습니다. 값은 자원
OW

답변:


472

이 마스크를 사용하면 RRGGBB 만 얻을 수 있으며 % 06X는 0으로 채워진 16 진수 (항상 6 자 길이)를 제공합니다.

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

3
이것은 완벽하게 작동했습니다, 감사합니다! Integer.toHexString ()에서 하위 문자열을 사용하는 것보다 쉽고 정확합니다.
Tom

7
방금 내가 원하는 것을 정확하게 수행하는 Color.parseColor (String hex) 메소드가 있다는 것을 깨달았습니다.
Marcel Bro

4
int colorInt = 0xff000000 | Integer.parseInt (hexString, 16);
Josh

5
색상이 알파를 사용하는 경우이 답변을 사용하지 마십시오. 당신은 그것을 잃을 것입니다.
시몬

5
@Simon,이 알파 준비가 되려면 마스크를 제거하고 6에서 8로 변경하십시오. OP는 알파 해제를 요청했습니다.
TWiStErRob

54

7
이 답변은 색상의 알파를 유지합니다
Bosah Chude

3
알파를 제거하려면 비트 마스크를 만드십시오. Integer.toHexString (value & 0x00FFFFFF)
ming_codes

3
Java int 유형의 길이는 4 바이트입니다. android.graphics.Color의 문서에 따르면 가장 왼쪽 바이트는 알파 채널입니다. 0x00FFFFFF 값으로 비트 단위 AND 연산을 사용하면 기본적으로 가장 왼쪽 바이트 (알파 채널)를 0으로 지 웁니다. Integer.toHexString과 함께 사용하면 나머지 3 바이트는 String에 그대로 남습니다. 유효하지 않은 모든 숫자는 통화에서 삭제되므로 선행 0을 원하면 직접 숫자를 앞에 두어야 할 수도 있습니다.
ming_codes 2016 년

1
작동하지 않습니다 0x000000FF, 또는 0xFF0000FF당신이 알파를 제거합니다.
TWiStErRob

26

나는 대답을 찾았다 고 생각합니다.이 코드는 정수를 16 진수 문자열로 변환하고 알파를 제거합니다.

Integer intColor = -16895234;
String hexColor = "#" + Integer.toHexString(intColor).substring(2);

참고 확실 알파를 제거하면 아무 영향을 미치지 않을 것이라고 경우에만이 코드를 사용합니다.


1
0x00FFFFFF이것을 통해 보내면 충돌 Color.parseColor합니다.
TWiStErRob

9

여기 내가 한 일이 있습니다.

 int color=//your color
 Integer.toHexString(color).toUpperCase();//upercase with alpha
 Integer.toHexString(color).toUpperCase().substring(2);// uppercase without alpha

고마워 당신이 일을 했어


첫 번째 변형은 0x00FFFFFF-> "FFFFFF"(알파 없음)에서 작동하지 않습니다 . 두 번째 변형은 0x00000FFF-> "F"(결측 비트)에서 작동하지 않습니다 .
TWiStErRob

@TWiStErRob 알파 채널의 색상에 안정적으로 작동하는 솔루션이 있습니까?
Saket

2
@Saket 최고의 답변 변형 :String.format("#%08X", intColor)
TWiStErRob

@TWiStErRob 아, 방금 답변 아래 댓글을 보았습니다. 감사!
Saket

5

ARGB 색상의 정수 값을 16 진수 문자열로 :

String hex = Integer.toHexString(color); // example for green color FF00FF00

16 진수 문자열을 ARGB 색상의 정수 값으로 :

int color = (Integer.parseInt( hex.substring( 0,2 ), 16) << 24) + Integer.parseInt( hex.substring( 2 ), 16);

4

이 메소드 Integer.toHexString을 사용하면 Color.parseColor를 사용할 때 일부 색상에 대해 알 수없는 색상 예외가있을 수 있습니다.

그리고이 메서드 String.format ( "# % 06X", (0xFFFFFF & intColor)) 을 사용하면 알파 값이 손실됩니다.

따라서이 방법을 권장합니다.

public static String ColorToHex(int color) {
        int alpha = android.graphics.Color.alpha(color);
        int blue = android.graphics.Color.blue(color);
        int green = android.graphics.Color.green(color);
        int red = android.graphics.Color.red(color);

        String alphaHex = To00Hex(alpha);
        String blueHex = To00Hex(blue);
        String greenHex = To00Hex(green);
        String redHex = To00Hex(red);

        // hexBinary value: aabbggrr
        StringBuilder str = new StringBuilder("#");
        str.append(alphaHex);
        str.append(blueHex);
        str.append(greenHex);
        str.append(redHex );

        return str.toString();
    }

    private static String To00Hex(int value) {
        String hex = "00".concat(Integer.toHexString(value));
        return hex.substring(hex.length()-2, hex.length());
    }

0
String int2string = Integer.toHexString(INTEGERColor); //to ARGB
String HtmlColor = "#"+ int2string.substring(int2string.length() - 6, int2string.length()); // a stupid way to append your color

0

를 사용 Integer.toHexString하면과 같은 색상을 변환 할 때 누락 된 0으로 끝납니다 0xFF000123. 여기에 안드로이드 특정 클래스 나 자바가 필요없는 내 kotlin 기반 솔루션이 있습니다. 따라서 다중 플랫폼 프로젝트에서도 사용할 수 있습니다.

    fun Int.toRgbString(): String =
        "#${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    fun Int.toArgbString(): String =
        "#${alpha.toStringComponent()}${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    private fun Int.toStringComponent(): String =
        this.toString(16).let { if (it.length == 1) "0${it}" else it }

    inline val Int.alpha: Int
        get() = (this shr 24) and 0xFF

    inline val Int.red: Int
        get() = (this shr 16) and 0xFF

    inline val Int.green: Int
        get() = (this shr 8) and 0xFF

    inline val Int.blue: Int
        get() = this and 0xFF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.