设置已经具有背景颜色的按钮边框

时间:2012-03-27 07:11:33

标签: c# android button border xamarin.android

我绝对是 mono for android 的初学者。

以下按钮是动态创建的,并分配了一些背景颜色。

如何为每个按钮指定特定厚度的黑色边框?(请参阅下面的屏幕截图)。  左图像是它现在的样子,右图像是它应该是什么样子。

我在SO上提到了thisthis,但它们并没有提供我需要的指导。

感谢任何帮助......

screen shot

修改

设置按钮背景的代码:

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

GetColorForScrips()中,我根据返回的RGB组件传递一个浮点值。

注意:

  1. 我正在使用 Mono for Android 作为我的IDE,而不是 Eclipse

  2. 我使用上面提到的代码段来分配背景颜色。

  3. 如果我使用btn.SetBackgroundDrawable(Resource.Drawable.Heatmap_Border);,则会误给我can't convert from int to drawable

  4. 如果我使用btn.SetBackgroundResource(Resource.Drawable.Heatmap_Border);,它会给我全黑屏幕,即按钮可点击,但不可见

  5. 建议输出:

    如上图右图所示,每个按钮将根据某个值具有特定背景。此背景是动态设置的。

    我还想在按钮上使用黑色边框。

    但我想这里最重要的是我不能使用 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);
    

2 个答案:

答案 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>