Reputation: 5996
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...
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.
I'm using Mono for Android as my IDE and not Eclipse.
I'm assigning background color by using above mentioned code snippet.
If I use btn.SetBackgroundDrawable(Resource.Drawable.Heatmap_Border);
, it gives me error that can't convert from int to drawable
.
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???
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
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
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