2

我正在尝试使按钮变圆,随机背景颜色?当我尝试下面的代码时,按钮没有被四舍五入。

这是代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newtestament);
    LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayoutnew);
    String[] values = { "Matthai", "Marka", "Luka", "Johan",
            "Sawltak Tangthu", "Rom Laikhak", "Korin Masa", "Korin Nihna",
            "Galati", "Efesa", "Filippi", "Kolose", "Thesalonika Masa",
            "Thesalonika Nihna", "Timoti Masa", "Timoti Nihna", "Titus",
            "Filemon", "Hebru", "James", "Peter Masa", "Peter Nihna",
            "Johan Masa", "Johan Nihna", "Johan Thumna", "Jude",
            "Maangmuhna" };
    Button[] b = new Button[values.length];
    for (int i = 0; i < b.length; i++) {
        b[i] = new Button(this);
    }
    int[] btnColor = { 0xAAe60038, 0xAA9142d6, 0xAAf07b04, 0xAA1515ff,
            0xAA23699e, 0xAA0a71ff, 0xAA3e3d39, 0xAA00b323, 0xAA754e45,
            0xAAfa061e, 0xAAe66d2d, 0xAAff00ff };
    // calling random
    Random random = new Random();
    // ramdomizing a color
    int c = btnColor[random.nextInt(btnColor.length)];
    for (int i = 0; i < values.length; i++) {

        // applying button rounded xml style
        b[i].setBackgroundDrawable(getResources().getDrawable(
                R.drawable.round));
        // setting randomized color
        b[i].setBackgroundColor(c);
        // layout
        LayoutParams params = new LinearLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
        // margin
        ((MarginLayoutParams) params).setMargins(5, 5, 5, 5);
        // padding
        b[i].setPadding(10, 10, 10, 10);
        // text color
        b[i].setTextColor(0xFFFFFFFF);
        // text
        b[i].setText(values[i]);
        // text size
        b[i].setTextSize(18);
        Typeface face = Typeface.createFromAsset(getBaseContext()
                .getAssets(), "UBUNTU-R.TTF");
        b[i].setTypeface(face);
        layout.addView(b[i], params);

    }

}

这是round.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<!-- you can use any color you want I used here gray color -->
<corners
    android:bottomLeftRadius="5dp"
    android:bottomRightRadius="5dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="5dp" />
    </shape>

我认为问题在于 setBackgroundDrawable、setBackgroundColor 和 romdomizing。需要哪些额外的代码????
更新:如何编辑 round.xml 以使按钮变圆?

4

2 回答 2

3

您将按钮背景设置为可绘制,然后将颜色设置为。所以语句是按顺序执行的。所以最后你的按钮应该有一个背景颜色集。因此,请尝试评论其中一个并再次运行代码。

    b[i].setBackgroundDrawable(getResources().getDrawable( R.drawable.round));
    // set background drawable
    // first your background drawable will be set
    b[i].setBackgroundColor(c);
    //set background color.  

可绘制文件夹中的 bkg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" 
    android:drawable="@drawable/pressed" />
<item  android:state_focused="false" 
    android:drawable="@drawable/normal" />
</selector>

正常的.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FFFFFF"/>    
<stroke android:width="3dp"
        android:color="#0FECFF" /><!-- #330000FF #ffffffff -->

<padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
<corners android:bottomRightRadius="7dp"
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
</shape>

按下的.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FF1A47"/>    
<stroke android:width="3dp"
        android:color="#0FECFF"/>
<padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
<corners android:bottomRightRadius="7dp"
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
</shape>

  b[i].setBackgroundResource(R.drawable.bkg);

快照

在此处输入图像描述

编辑:

  int colors []= {Color.RED, Color.BLACK, Color.BLUE,Color.GREEN};
  Random r = new Random();
    for (int i = 0; i < colors.length; i++) {
        b[i].setBackgroundColor(colors[r.nextInt(3)]);
    }   
于 2013-04-13T10:06:07.013 回答
2

文档view.setBackgroundDrawable(drawable) 而且b[i].setBackgroundColor(c);您不能同时使用两者。它只会生效最后一个。

于 2013-04-13T09:57:05.600 回答