140

ビューの角を丸くし、実行時の内容に基づいてビューの色も変更したいと思います。

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);

ドローアブルと色を設定するとオーバーラップすることを望んでいましたが、そうではありません。2 番目にどちらを実行しても、結果の背景になります。

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

編集:テストのために、現在赤と青を交換しているだけです。後で、ユーザーが色を選択できるようになります。

編集:

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>
4

9 に答える 9

235

の代わりにsetBackgroundColor、背景のドローアブルを取得し、その色を設定します。

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> 
于 2013-08-23T04:58:17.700 に答える
140

丸みを帯びた角を設定し、ビューにランダムな背景色を追加するための完全なプログラムによるアプローチ。私はコードをテストしていませんが、アイデアはわかります。

 GradientDrawable shape =  new GradientDrawable();
 shape.setCornerRadius( 8 );

 // add some color
 // You can add your random color generator here
 // and set color
 if (i % 2 == 0) {
  shape.setColor(Color.RED);
 } else {
  shape.setColor(Color.BLUE);
 }

 // now find your view and add background to it
 View view = (LinearLayout) findViewById( R.id.my_view );
 view.setBackground(shape);

ここでは、グラデーション ドローアブルを使用して、そのようなメソッドを提供していないGradientDrawable#setCornerRadiusため、利用できるようにしています。ShapeDrawable

于 2013-10-03T06:11:51.533 に答える
12

これを行う最も速い方法は次のとおりだと思います。

GradientDrawable gradientDrawable = new GradientDrawable(
            GradientDrawable.Orientation.TOP_BOTTOM, //set a gradient direction 
            new int[] {0xFF757775,0xFF151515}); //set the color of gradient
gradientDrawable.setCornerRadius(10f); //set corner radius

//Apply background to your view
View view = (RelativeLayout) findViewById( R.id.my_view );
if(Build.VERSION.SDK_INT>=16)
     view.setBackground(gradientDrawable);
else view.setBackgroundDrawable(gradientDrawable);    
于 2016-04-23T07:48:54.487 に答える
3

可視性を高めるために、 @cimlman のコメントを最上位の回答にコピーします。

PaintDrawable(Color.CYAN).apply {
  setCornerRadius(24f)
}

参考: ShapeDrawable(およびそのサブタイプPaintDrawable) は、デフォルトの固有の幅と高さ 0 を使用します。ドローアブルがユースケースに表示されない場合は、寸法を手動で設定する必要がある場合があります。

PaintDrawable(Color.CYAN).apply {
  intrinsicWidth = -1
  intrinsicHeight = -1
  setCornerRadius(24f)
}

-1Drawable が固有の幅と高さを持たないことを示す魔法の定数です ( Source )。

于 2019-10-23T21:56:19.410 に答える