2016-10-27 5 views
0

У меня есть много XMLs, которые используют цвет фона от формы вводимого коэффициента как:Изменения цвета фона/вытяжка из источника

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:background="@drawable/background" 
/> 

Моего формы фон XML является:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:type="linear" 
     android:startColor="#FFffffff" 
     android:endColor="#FFE8E8E8" 
     android:angle="315" />  
</shape> 

Теперь я хочу добавьте функцию, где я даю пользователю возможность изменить цвет фона. Есть ли быстрый способ, с помощью которого я могу изменить исходную форму, извлекаемую на основе некоторого значения, а не на . Каждый из активности, который загружает xml и меняет это?

спасибо.

+0

Вы хотите изменить цвет формы во время выполнения или хотите изменить форму? –

+0

Цвет формы – Snake

ответ

0

Вы можете создать список или кнопки для пользователей с разными именами. На основе щелчка кнопки вы можете программно изменить макет фона. Например:

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.drawable1Button: 
      final int sdk = android.os.Build.VERSION.SDK_INT; 
      if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
      layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.drawable1)); 
      } else { 
       layout.setBackground(getResources().getDrawable(R.drawable.drawable1)); 
      } 

      break; 

     case R.id.drawable2Button: 
      final int sdk = android.os.Build.VERSION.SDK_INT; 
      if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
      layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.drawable2)); 
      } else { 
       layout.setBackground(getResources().getDrawable(R.drawable.drawable2)); 
      } 
      break; 
     case R.id.drawable3Button: 
      final int sdk = android.os.Build.VERSION.SDK_INT; 
      if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
      layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.drawable3)); 
      } else { 
       layout.setBackground(getResources().getDrawable(R.drawable.drawable3)); 
      } 
      break; 
     } 
     } 
+0

Спасибо, но пожалуйста, внимательно прочитайте мой адрес. Я не хочу идти и изменять его для активности, поскольку у меня много макетов xml. Я хочу, чтобы это было сделано в одном месте. – Snake

+0

Затем сделайте общий метод в каком-то классе, и вам нужно будет получить к нему доступ от каждого действия. Для чего потребуется только одна строка кода. –

+0

Доступ к ней из всех видов деятельности эффективно изменяет код каждого вида деятельности. Это большой проект с не менее чем 40 видами деятельности и фрагментами. Я не меняю каждого. Я хочу изменить источник (xml drawable), если возможно – Snake

0

Изменить ваш background.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/shape_id"> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="line"> 
      <gradient 
       android:angle="315" 
       android:endColor="#FFE8E8E8" 
       android:startColor="#FFffffff" 
       android:type="linear" /> 

     </shape> 
    </item> 
</layer-list> 

Теперь на кнопку мыши просто узнать, какой цвет комбинации вы хотите изменить, и поставить этот цвет в массив и изменить по щелчку.

final LinearLayout l =(LinearLayout)findViewById(R.id.linearLayout); 
     l.setBackgroundResource(R.drawable.background); 
     final View v = findViewById(R.id.linearLayout); 
     Button b =(Button)findViewById(R.id.button); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int colors[] = { 0xff255779, 0xffa6c0cd }; 
       GradientDrawable gradientDrawable = new GradientDrawable(
         GradientDrawable.Orientation.TOP_BOTTOM, colors); 
       l.setBackground(gradientDrawable); 

      } 
     }); 
+0

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

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