2014-12-18 5 views
1

В моем приложении для Android у меня есть кнопка со стрелкой на правой стороне. В моем приложении «Настройки» вы можете изменить цвет приложения (изменить цвет кнопок и TextViews).Как изменить цвет фона кнопки с изображением на Android

Я изменил цвет TextViews в порядке, но когда я изменил цвет кнопок, изображение (стрелка на правой стороне) исчезло.

Это мой код сейчас. Он меняет цвет и удаляет imge.

loginButton = (Button) findViewById(R.id.btnLogin); 
loginButton.setTextColor(color); 

Я нахожу это на каком-то посту. Но это работает только для ImgageView, а не для кнопки.

loginButton = (Button) findViewById(R.id.btnLogin); 
GradientDrawable bgShape = (GradientDrawable)loginButton.getBackground(); 
bgShape.setColor(getResources().getColor(Color.BLACK)); 
text.setTextColor(color); 

Я также попытался изменить цвет следующим образом. Но это совсем не меняет цвет.

Drawable button = context.getResources().getDrawable(R.drawable.button); 
button.setColorFilter(new 
PorterDuffColorFilter(0xffff00,Mode.MULTIPLY)); 

Последнее, что, я надеюсь, должно сработать, это определить новые возможности для каждого цвета. Но это действительно ужасно ... Я также думаю, что проблема заключается не только в изображении. Я думаю, что это решение отменяет все доступные файлы ...

Есть ли кто-нибудь, кто знает, как изменить цвет рисунка и сохранить изображение на кнопке?

EDIT: Просто пытаюсь ... Я могу перемещать все цвета в файл colors.xml. И измените путь цвета на все доступные файлы. Как

<resource> 
    Color 1 
    Color 2 
    Color 3 
    ... 
</resource> 

Но как можно вырисовывать файлы, какой цвет он должен использовать?

EDIT2: Кнопка раскладка:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    style="@style/bgGrey"> 
    <RelativeLayout 
     android:layout_height="0dip" 
     android:layout_weight="30" 
     android:layout_width="fill_parent" 
    > 
    <TextView 
     ... 
    /> 
    </RelativeLayout> 
    <LinearLayout 
    ...> 
     <TextView 
     .../> 
     <EditText 
     .../> 
     <TextView 
     .../> 
     <EditText 
     .../> 
     <Button 
      android:id="@+id/btnLogin" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/password" 
      android:gravity="center|left" 
      android:paddingLeft="15dp" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/login_button_background" 
      android:text="Login" /> 

    </LinearLayout> 
</LinearLayout> 

Кнопка вытяжка, background.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/layer"></item> 
</selector> 

layer.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:left="0dp" android:top="5dp" android:bottom="5dp" android:right="0dp" > 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
      <solid android:color="#ffb500"/> 
     </shape> 
    </item> 
    <item android:left="350dp" android:top="5dp" android:bottom="5dp" android:right="5dp" > 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
      <solid android:color="#ffb500"/> 
     </shape> 
    </item> 
    <item android:right="15dp" > 
     <bitmap android:src="@drawable/btn_right" android:gravity="right" android:tileMode="disabled" /> 
    </item> 
</layer-list> 
+0

Вы могли бы разместить свой макет xml и свой файл кнопки из выпадающих папок? –

+0

@blipinsk Конечно, макет и чертеж уже добавлены – kristyna

ответ

1

Альтернативный подход может быть: Удалить стрелку из фон и установить его как Соединение Drawable.

Как Button распространяется TextView, вы можете установить выходы сверху, снизу, влево или вправо.

В XML, просто установите свойство drawableRight на стрелку, или с помощью кода JAVA:

button.setCompoundDrawablesWithIntrinsicBounds (idLeft, idTop, idRight, idBottom) 

Так установить стрелку вправо:

button.setCompoundDrawablesWithIntrinsicBounds (0, 0, R.drawable.your_arrow, 0); 

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

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

+0

Удивительный! Отлично, спасибо :) – kristyna

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