我绝对是 mono for android 的初学者。
以下按钮是动态创建的,并分配了一些背景颜色。
如何为每个按钮指定特定厚度的黑色边框?(请参阅下面的屏幕截图)。 左图像是它现在的样子,右图像是它应该是什么样子。
我在SO上提到了this和this,但它们并没有提供我需要的指导。
感谢任何帮助......
设置按钮背景的代码:
int[] colors=GetColorForScrips(decimal.Parse(_result.Rows[i]["Change(%)"].ToString ()));
btn.SetBackgroundColor(Color.Rgb(colors[0],colors[1],colors[2]));
在 GetColorForScrips()中,我根据返回的RGB组件传递一个浮点值。
我正在使用 Mono for Android 作为我的IDE,而不是 Eclipse 。
我使用上面提到的代码段来分配背景颜色。
如果我使用btn.SetBackgroundDrawable(Resource.Drawable.Heatmap_Border);
,则会误给我can't convert from int to drawable
。
如果我使用btn.SetBackgroundResource(Resource.Drawable.Heatmap_Border);
,它会给我全黑屏幕,即按钮可点击,但不可见。
建议输出:
如上图右图所示,每个按钮将根据某个值具有特定背景。此背景是动态设置的。
我还想在按钮上使用黑色边框。
但我想这里最重要的是我不能使用 btn.SetBackgroundDrawable()
或 btn.SetBackgroundResource()
或 btn.SetBackgroundColor()
在一起。
在这种情况下,只会在以后实施。
任何解决方案???
根据其中一位用户的建议,这非常有效......(GetColorForScrips()
根据Float值返回RGB
值。
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);
答案 0 :(得分:2)
使用此代码
在drawable文件夹中创建一个button_bg.xml
文件
<?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>
而不是
btn.SetBackgroundColor(Color.Rgb(colors[0],colors[1],colors[2]));
将此作为您的按钮背景使用
btn.setBackgroundResource(R.drawable.button_bg)`
答案 1 :(得分:0)
您可以通过编程方式制作GradientDrawable,使用它可以在运行时设置边框和颜色。
这是一个简单的例子。
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));
}
}
}
我使用了这个布局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>