2015-02-18 4 views
24

Как создать эту форму программно?Как создать фон формы андроида программно?

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

    <solid android:color="#e67e22"/> 
    <corners 
     android:topLeftRadius="0dp" 
     android:topRightRadius="0dp" 
     android:bottomLeftRadius="5dp" 
     android:bottomRightRadius="5dp"/> 
</shape> 

Я пробовал эту простую функцию, которая получает углы, цвет и наборы, чтобы формировать:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.category_header); 

    GradientDrawable drawable = (GradientDrawable) linearLayout.getDrawable(); 

    float[] values = { 0.2f, 0.2f, 0.2f, 0.2f }; 
    drawable.setCornerRadii(values); 

Но я получил эту ошибку:

Метод getDrawable() не определен для типа LinearLayout

+0

Смотрите этот [пост] (http://stackoverflow.com/questions/17823451/set-android-shape-color-programmatically) или [ this] (http://stackoverflow.com/questions/7164630/how-to-change-shape-color-dynamically) ... –

+0

Почему бы не использовать несколько стилей? – Droidekas

+0

@Droidekas У меня должно быть более 20 файлов стиля xml, если я не могу создать пользовательскую функцию для создания этого –

ответ

76

Вы можете сделать это следующим образом:

public static void customView(View v, int backgroundColor, int borderColor) { 
    GradientDrawable shape = new GradientDrawable(); 
    shape.setShape(GradientDrawable.RECTANGLE); 
    shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 }); 
    shape.setColor(backgroundColor); 
    shape.setStroke(3, borderColor); 
    v.setBackground(shape); 
} 

См. documentation по смыслу setCornerRadii параметров.

Вы можете использовать эту функцию во всем своем приложении и можете устанавливать границы и цвет фона по вашему выбору.

+0

Полезный ... Решил мою проблему ... спасибо, но setBackgroundDrawable устарел :( –

+2

@AnkushJoshi, используйте setBackground –

1

Вы также можете использовать OVAL формы вместо прямоугольника:

GradientDrawable shape = new GradientDrawable(); 
shape.setShape(GradientDrawable.OVAL); 
shape.setColor(Color.WHITE); 
shape.setStroke(2, Color.BLACK); 
view.setBackground(shape);