настройка кнопки границы, которая уже имеет цвет фона - PullRequest
0 голосов
/ 27 марта 2012

Я абсолютный новичок в моно для Android .

Следующие кнопки создаются динамически и им назначается некоторый цвет фона.

Как назначить черную рамку с определенной толщиной для каждой кнопки? (см. Скриншот ниже). Левое изображение - это то, как оно выглядит сейчас, а правое изображение - то, как оно должно выглядеть.

Я упомянул , это и , это на SO, но они не обеспечивают руководство, в котором я нуждался.

Любая помощь приветствуется ...

screen shot

EDIT

Код для настройки фона кнопки:

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

В GetColorForScrips () я передаю значение с плавающей запятой, на основе которого возвращаются компоненты RGB.

Примечание:

  1. Я использую Mono для 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);, это дает мне полный черный экран, то есть кнопки можно нажимать, но не видно .

Предлагаемый вывод:

Как показано на правом изображении выше, каждая кнопка будет иметь определенный фон в зависимости от некоторого значения. Этот фон устанавливается динамически.

Я также хочу использовать черную рамку на кнопке.

Но я предполагаю, что большой улов в том, что я не могу использовать любые два из btn.SetBackgroundDrawable() ИЛИ btn.SetBackgroundResource() ИЛИ btn.SetBackgroundColor() вместе.

В таком сценарии будет реализовано только позднее.

Любое решение ???

Окончательное редактирование

Как предположил один из пользователей, это прекрасно работает ... (GetColorForScrips() возвращает значение RGB, основанное на значении типа Float).

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 ]

2 голосов
/ 27 марта 2012

используйте этот код

создать один 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)`
0 голосов
/ 04 апреля 2012

Вы можете сделать 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>
...