1. ホーム
  2. android

[解決済み] プログラムで角を丸くし、ランダムな背景色を設定する方法

2022-05-26 14:48:19

質問

ビューの角を丸くし、実行時に内容に応じてビューの色も変えたいのですが、可能でしょうか?

TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
    v.setBackgroundColor(Color.RED);
}else{
    v.setBackgroundColor(Color.BLUE);
}

v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);               
v.setBackgroundResource(R.drawable.tags_rounded_corners);

drawableの設定と色の設定が重なることを期待していたのですが、重なりません。私が2番目に実行したものが、結果として得られる背景です。

背景色が実行時まで決定されないことを念頭に置いて、このビューをプログラムで作成する方法はありますか?

edit: 今はテストのために赤と青を切り替えているだけです。後でユーザーが色を選べるようにする予定です。

を編集してください。

tags_rounded_corners.xmlを参照してください。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners 
         android:bottomRightRadius="2dp" 
         android:bottomLeftRadius="2dp" 
         android:topLeftRadius="2dp" 
         android:topRightRadius="2dp"/>
</shape>

どのように解決するのですか?

の代わりに setBackgroundColor の代わりに、背景のdrawableを取得し、その色を設定します。

v.setBackgroundResource(R.drawable.tags_rounded_corners);

GradientDrawable drawable = (GradientDrawable) v.getBackground();
if (i % 2 == 0) {
  drawable.setColor(Color.RED);
} else {
  drawable.setColor(Color.BLUE);
}

また、パディングは tags_rounded_corners.xml :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <corners android:radius="4dp" />
  <padding
    android:top="2dp"
    android:left="2dp"
    android:bottom="2dp"
    android:right="2dp" />
</shape>