16進数の色文字列から色を取得する方法


回答:


592

Colorクラスメソッドを試してください:

public static int parseColor (String colorString)

Androidのドキュメントから:

サポートされている形式は次のとおりです:#RRGGBB #AARRGGBB 'red'、 'blue'、 'green'、 'black'、 'white'、 'gray'、 'cyan'、 'magenta'、 'yellow'、 'lightgray'、 'darkgray 」


4
誰でも#000値を解析する方法を知っていますか?
Alex Semeniuk、2015年

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(colorString.length() == 4 && colorString[0] == '#')
ザック

関数だけでなく、その使用方法も表示する方がよいでしょう。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"をアッパーに
イゴールモンテイロ

38

この質問は16進数の色に関連する多くの検索で出てくるので、ここに要約を追加します。

intからの色

16進数の色は次の形式になります RRGGBBまたはAARRGGBB(アルファ、赤、緑、青)。私の経験では、int直接使用する場合は、完全なAARRGGBBフォームを使用する必要があります。RRGGBBフォームしかない場合は、プレフィックスを付けるだけでFF、アルファ(透明度)を完全に不透明にします。これをコードで設定する方法を次に示します。0x最初に使用すると、10を底とするのではなく、16進数になります。

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

文字列からの色

他の人が指摘したように、あなたはColor.parseStringそのように使うことができます

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

文字列はで始まる必要があることに注意してください#RRGGBBAARRGGBB形式の両方がサポートされています。

XMLからの色

実際には、可能な限りXMLから色を取得する必要があります。これにより、アプリの色を簡単に変更できるため、このオプションをお勧めします。コード全体に16進数の色をたくさん設定すると、後でそれらを変更しようとするのは大変なことです。

Androidマテリアルデザインには、16進数値が既に構成された色味があります。

これらのテーマの色はアプリ全体で使用され、次のようになります。

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の2つのステップで色を定義することをお勧めします。最初に16進値の色に名前を付け、次に特定の色を取得する必要があるアプリのコンポーネントに名前を付けます。これにより、後で色を簡単に調整できます。繰り返しますが、これは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して使用することができ、色setBackgroundColorsetTextColor

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

16は、16進数であり、通常の0〜9ではないことを意味します。結果は次のようになります

int color = 0xFFFF0000;

文字列の色= "80000000"を変換するにはどうすればよいですか。int color =?
Ashish Sahu、2014年

私は文字列バージョンがそうであると思っていると思い#80000000ますint color = 0x80000000;。その場合、intバージョンはそうなります。それでも問題が解決しない場合は、詳細を記載した新しい質問を投稿してください。#80000000半透明の黒色を心がけてください。
ブライアンフィールド

私はintがint color = 0x80000000であることを知っていますが、私の問題はそれをどのように変換するかです...でも、int color = parseColor( "#" + "80000000");で自分の問題を自分で解決します...返信ありがとうございます。
Ashish Sahu、2014年

コードを使用して例外が発生しました:java.lang.NumberFormatException:Invalid int: "FFFF0000"
error1337


15

これを試して:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));

12

私はこれを使用し、好きな色を設定するのに最適です。

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

赤、緑、青のそれぞれに0〜255を使用して色を設定し、その色を使用する任意の場所に、Color.BLUEまたはColor.REDまたはColorクラスが提供するその他の静的色の代わりにMY_COLORを配置します。

カラーチャートをGoogle検索するだけで、0〜255を使用して正しいRGBコードのチャートを見つけることができます。


7

Xamarinではこれを使用します

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

6

res / values / colors.xmlに保存された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
その3番目のFをゼロに置き換える必要があると思います。OPでは、最初の2つのF文字が不透明度の設定に使用されていると思います。
ブライアンフィールド

4

XMLで色を定義し、それを使用して背景色や何かを変更したい場合、このAPIはあなたが探しているものです:

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

私のサンプルでは、​​TestViewに使用しました


0

短縮された16進コードの場合

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.