2015-02-18 3 views
0

Есть очень хорошие решения для создания круглой кнопки. (How to make a round button?)Стиль с круглой кнопкой

Большинство из них, однако, имеют жесткий код цвета в файле xml-кнопки.

Есть ли способ создать круглую кнопку с настраиваемым/изменяемым цветом? (Мне не нравится идея создания одного xml-файла для каждой кнопки цвета, которую я мог бы использовать)

В идеале я бы применил цвет, когда я использую свой RoundButton в своем layout.xml, как и для представления.

Примечание. Моя кнопка должна содержать текст, поэтому он также может быть TextView.

Благодаря

ответ

3

Define XML без цвета (XML из вашей ссылки):

roundedbutton.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<corners android:bottomRightRadius="8dip" 
    android:bottomLeftRadius="8dip" 
    android:topRightRadius="8dip" 
    android:topLeftRadius="8dip"/> 

button.xml:

<Button 
    android:layout_height="50dp" 
    android:layout_width="90dp" 
    android:id="@+id/button" 
    android:text="Button" 
    android:background="@drawable/roundedbutton"/> 

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

button.getBackground().setColorFilter(Color.parseColor("#bbe618"), PorterDuff.Mode.SRC_IN); 

Результат:

enter image description here

+0

Приятно, спасибо, я использовал android: shape = "oval">, и он отлично работал – user1654757

+0

Добро пожаловать. –

0

Если вы хотите простой кнопки с закругленными углами, которые можно использовать непосредственно в CardView здесь: round corners. ? Вы можете задать программно цвет фона CardView и сохраняют пульсацию с передним планом = selectableitembackground

Для кнопки круга вы можете использовать эту библиотеку: circle button

0

Вы можете сделать функцию, как это и передать ему представление и цвет.

/** 
* 
* @param v: Can be any view like Button, Textview, Linearlayout,etc 
* @param color: Background color which you want 
*/ 
public static void setRoundedBackGround(View v, int color) 
{ 
    GradientDrawable drawable = new GradientDrawable(); 
    drawable.setShape(GradientDrawable.RING); 
    drawable.setStroke(3, Color.BLACK); // You can set any border color 

    if(color == 0) 
    { 
     drawable.setColor(Color.TRANSPARENT); 
     v.setBackgroundDrawable(drawable); 
    } 
    else 
    { 
     drawable.setColor(color); 
     v.setBackgroundDrawable(drawable); 
    } 
} 

Надеюсь, это может вам помочь.

Смежные вопросы