GAMA
GAMA

Reputation: 5996

setting button border which already has a background color

I'm absolute beginner to mono for android.

Following buttons are created dynamically and assigned some background color.

How to assign black border with particular thickness to each button?(refer below screenshot). Left image is how it looks now and right image is how it should look like.

I've referred this and this on SO, but they doesn't provide the guidance I needed.

Any help appreciated...

screen shot

EDIT

Code for setting Button Background :

int[] colors=GetColorForScrips(decimal.Parse(_result.Rows[i]["Change(%)"].ToString ()));
btn.SetBackgroundColor(Color.Rgb(colors[0],colors[1],colors[2]));

In GetColorForScrips(), I pass a float value, based on which RGB components are returned.

Note:

  1. I'm using Mono for Android as my IDE and not Eclipse.

  2. I'm assigning background color by using above mentioned code snippet.

  3. If I use btn.SetBackgroundDrawable(Resource.Drawable.Heatmap_Border);, it gives me error that can't convert from int to drawable.

  4. If I use btn.SetBackgroundResource(Resource.Drawable.Heatmap_Border);, it gives me full black screen i.e. Buttons are clickable, but not visible.

Proposed output:

As shown in right image above, each button will have a particular background depending on some value. This background is set dynamically.

I also want to use black border across the button.

But I guess the big catch here is I can't use any two from btn.SetBackgroundDrawable() OR btn.SetBackgroundResource() OR btn.SetBackgroundColor() together.

In such a scenario, only later will be implemented.

Any solution???

FINAL EDIT

As suggested by one of the users, this works perfectly... (GetColorForScrips() returns RGB value based on a Float value).

GradientDrawable drawable = new GradientDrawable();
drawable.SetShape(ShapeType.Rectangle);
drawable.SetStroke(1, Color.Black);
                
int[] colors=GetColorForScrips(decimal.Parse(result.Rows[i]["Change(%)"].ToString ()));
drawable.SetColor(Color.Rgb(colors[0],colors[1],colors[2]))             
btn.SetBackgroundDrawable(drawable);

Upvotes: 0

Views: 2308

Answers (2)

kingori
kingori

Reputation: 2616

You can make GradientDrawable programmatically and by using this, you can set border, color in runtime.

here's simple example.

public class And_testActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LinearLayout view = (LinearLayout) findViewById(R.id.content_view);

    for( int i=0;i<10;i++) {
        Button btn = new Button(getApplicationContext());

        GradientDrawable drawable = new GradientDrawable();
        drawable.setShape(GradientDrawable.RECTANGLE);
        drawable.setStroke(5, Long.decode("0xff00ffff").intValue() + i * 30);
        drawable.setColor(  Long.decode("0xffff00ff").intValue()+ i * 50);

        btn.setBackgroundDrawable(drawable);

        view.addView(btn , new LayoutParams(30, 30));   
    }
}
}

I used this layout xml.

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:id="@+id/content_view" >

</LinearLayout>

Upvotes: 0

RajaReddy PolamReddy
RajaReddy PolamReddy

Reputation: 22493

use this code

create one button_bg.xml file in drawable folder

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle" android:padding="10dp">
  <solid android:color="@color/background_color"/>
  <corners
     android:bottomRightRadius="5dp"
     android:bottomLeftRadius="5dp"
     android:topLeftRadius="5dp"
     android:topRightRadius="5dp"/>
  <stroke android:width="2dp" android:color="@color/borderline_color" />
</shape>

instead of this

btn.SetBackgroundColor(Color.Rgb(colors[0],colors[1],colors[2]));

use this as your button background like this

btn.setBackgroundResource(R.drawable.button_bg)`

Upvotes: 2

Related Questions