web-dev-qa-db-ja.com

プログラムで文字列からレイアウトの背景の色合いを設定するにはどうすればよいですか?

私はこのコードを試しました:

LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
        someLayout.setBackgroundTintList(context.getResources().getColorStateList(Color.parseColor("#ff8800")));

しかし、エラーが発生します:Android.content.res.Resources$NotFoundException外部ソースからカラー16進数を取得しているため、colors.xmlに埋め込むことができません。また、背景ではなく色合いを変更したいので、setBackgroundはオプションではありません。

7
Waseem

GetColorStateList()を使用できないと思ったので、別の方法を探しました。最後に、次のコードを使用して色合いを設定することができました。

LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
        someLayout.getBackground().setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP);

これは、xmlファイルのbackgroundTintプロパティを変更したかのように機能したため、問題に最適です。

12
Waseem

次の行を使って管理することができました。状況に合わせて変更してください。

myView.getBackground().setTint(currentView.getResources().getColor(R.color.colorAccent));
2
Jin Lim

GetColorStateListメソッドはリソースのintidを予期し、RGBカラーintを渡しているため、このようにすることはできません。次のようにカラー状態リストを作成する必要があります link

次に、次のように設定します。

.getColorStateList(R.color.your_xml_name)
0
C. Alen

Kotlinの場合、@ Krestekの回答を変更しました:

someLayout.background.setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP)