web-dev-qa-db-ja.com

プログラムで角を丸め、ランダムな背景色を設定する方法

ビューの角を丸めて、実行時のコンテンツに基づいてビューの色を変更したいと思います。

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>
100
John Moffitt

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> 
187
chiuki

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

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

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

106
JaydeepW

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

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

次のように DrawableCompat を使用することで、これをより良く達成できます。

Drawable backgroundDrawable = view.getBackground();             
DrawableCompat.setTint(backgroundDrawable, newColor);
8

脳卒中がない場合は、使用できます

colorDrawable = resources.getDrawable(R.drawable.x_sd_circle); 

colorDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

しかし、これはまた、ストロークの色を変更します

5
Akhil Dad

任意のアイテム(レイアウト、テキストビュー)の色を動的に変更できます。以下のコードを試して、レイアウトでプログラムで色を設定してください

activity.Javaファイル内


String quote_bg_color = "#FFC107"
quoteContainer= (LinearLayout)view.findViewById(R.id.id_quotecontainer);
quoteContainer.setBackgroundResource(R.drawable.layout_round);
GradientDrawable drawable = (GradientDrawable) quoteContainer.getBackground();
drawable.setColor(Color.parseColor(quote_bg_color));

drawableフォルダーにlayout_round.xmlを作成します

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="@color/colorPrimaryLight"/>
    <stroke Android:width="0dp" Android:color="#B1BCBE" />
    <corners Android:radius="10dp"/>
    <padding Android:left="0dp" Android:top="0dp" Android:right="0dp" Android:bottom="0dp" />
</shape>

activity.xmlファイルのレイアウト

<LinearLayout
        Android:id="@+id/id_quotecontainer"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">

----other components---

</LinearLayout>


0
Suman Sarkar