2011-01-17 20 views
3

私は比較的新しいAndroid開発者です。私は誰かが説明できることを私には奇妙に感じていました。私はLinearLayout llを持っています。JavaのLinearLayoutとTextViewで色を変更する(Android)

実行したときにこのコード行は、私のために失敗します。

ll.setBackgroundColor(R.color.white); 

しかしこのコード行は、動作します。

ll.setBackgroundResource(R.color.white); 

私は私のリソースに白定義したそのいうだけの理由を想定しています。しかし、私もsetBackgroundColor()で0xFFFFFFを渡そうとしましたが、どちらも動作しません。実行された場合にも同様に私のTextViewのテキストでのコード行が失敗した

text.setTextColor(R.color.white); 

私はので、私は、私は(私も見ることができます私のLinearLayoutのように)それを正しく初期化され知っている私のTextViewを見ることができます。だから私は私の質問が沸騰すると思う:どのように私は正しくLinearLayout.setBackgroundColor()とTextView.setTextColor()を使用するのですか?

ありがとうございます。私はドキュメントを読んで、グーグルでオンラインで情報を見つけようとしたが、何も出てこなかった。

答えて

4

R.color.whateverはintです。これは、外部定義された(XMLで)リソースへの参照として自動的に生成されます。 setBackgroundColorをこの整数で呼び出すと、このintの値をColorとして解析しようとしています。 setBackgroundResourceは、渡されたリソース整数を取得する予定です。外部で定義された値を取得し、そのように色を適用します。 setBackgroundColorについては、アルファ値を含む完全な16進値の色を使用してみてください。 0xFFFFFFFF(最初の2つのF値はアルファ値です)。

編集:Markによって殴られました! :P

+0

アルファバイトを追加するあなたの解決策は、とても感謝しました:)マークのソリューション私は確かにうまくいくでしょうが、彼は私にそれを使うのに十分な情報を与えていませんでした。両方のすべての情報をありがとう、それは本当に私を助けてくれました:) –

+3

助けてよかった! Markのソリューションに対するあなたのコメントに答えるために、ColorはAndroidの標準的なインポートです。 Eclipseにいる場合は、Ctrl + Shift + Oキーを押してインポートを追加するか、手動でインポートしたい場合は、import android.graphics.Color; – kcoppock

+0

ありがとう –

16

ロブ、

問題はsetBackgroundColor()は色オブジェクトを探しているということです。だから、すなわち、setBackgroundResourceが背景として使用するリソースを探しているのに対し、

ll.setBackgroundColor(Color.WHITE); 

または

ll.setBackgroundColor(Color.parseColor("#ffffff")); 

以下の行のようなものを使用するように解像度のフォルダに何かが必要になります。あなたはそれを使って背景を描画可能なものにするか、その性質のものを設定することができます。

ll.setBackgroundResource(R.something.mydrawable); 
+0

カラーを使用するには?ありがとう! –

1

私の場合は、Color intとColorの両方をリソースで定義する必要がありました。両方とも整数であったにもかかわらず、setBackgroundColor(int colorInt)とsetBackgroundResource(int resourceIdOfColor)を使用するには、特定の形式でなければなりません。

私が使用:色のint型の形式で残油を取得するために

int colorInt = getResources().getColor(R.color.resourceIdOfColor) 

を、ので、私はどこにでもsetBackgroundColorを使用することができます。


あなたがあなた自身のコード内でこの2つを区別するために注釈を使用することができます

:AndroidのフレームワークAPIはすでに注釈が付けする必要があります

@ColorInt 
private int getColor(@ColorRes int id) { 
    return getResources().getColor(id); 
} 

:私はインポートする必要が何

public void setBackgroundResource(@DrawableResource int id); 
public void setBackgroundColor(@ColorInt int color); 
関連する問題