2015-01-28 2 views
0

У меня проблема с заданием. Предполагается, что мое приложение Android изменит цвет фона всех макетов, которые у меня есть в моем приложении (у меня есть 9 кстати), нажав кнопку и изменив цвет всех кнопок в приложении, нажав другую кнопку. Я понятия не имею, как это сделать (изменить), кроме того, меняя их один за другим, чего я не хочу, потому что у меня 6 разных цветов и много кнопок.Изменить цвет для разных частей приложения

Я нашел этот учебник о динамически меняющихся тем, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html , но таким образом я могу изменить только один или оба одновременно.

мой манифест:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="android.permission.CALL_PHONE"/> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.SEND_SMS"/> 


<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" android:enabled="false" android:vmSafeMode="false"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Call"></activity> 
    <activity android:name=".City"></activity> 
    <activity android:name=".Map"></activity> 
    <activity android:name=".Date"></activity> 
    <activity android:name=".Color"></activity> 
    <activity android:name=".Sms"></activity> 
    <activity android:name=".Developer"></activity> 
    <activity android:name=".Sms2"></activity> 
</application> 

Пожалуйста, помогите

+0

Раньше было так, что вы не могли динамически изменять свою тему во время выполнения, и это все еще может быть так. Если вы изменили тему в 'onCreate', это было приемлемо. Но чтобы увидеть изменения в теме, вам нужно будет воссоздать «Активность». Я не знаю, изменилось ли это. В зависимости от ограничений вы можете просто сделать вызов, который проходит через каждое представление и изменяет цвета. –

+0

Насколько я знаю, эти ограничения по-прежнему применяются. В этом учебнике используется вторичная активность, которая перезапускается каждый раз, когда мы нажимаем кнопку, а затем все остальные действия извлекаются из них. Но, как я уже сказал, таким образом я могу изменить только фоны, кнопки или оба одновременно.И мне нужно иметь возможность менять кнопки и фоны отдельно, без изменений по одному. – Rasmnev

ответ

0

MainActivity.java

package com.mavenmaverick.myapplication; 

import android.support.v7.app.ActionBarActivity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.RelativeLayout; 

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Button Red = (Button) findViewById(R.id.buttonred); 
    final Button Green = (Button) findViewById(R.id.buttongreen); 
    final Button Yellow = (Button) findViewById(R.id.buttonyellow); 
    final Button Blue = (Button) findViewById(R.id.buttonblue); 
    final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); 

    Red.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      relativeLayout.setBackgroundColor(Color.parseColor("#DC143C")); 
      Green.setBackgroundColor(Color.RED); 
      Yellow.setBackgroundColor(Color.RED); 
      Blue.setBackgroundColor(Color.RED); 


     } 
    }); 

    Green.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      relativeLayout.setBackgroundColor(Color.parseColor("#26D840")); 
      Red.setBackgroundColor(Color.GREEN); 
      Yellow.setBackgroundColor(Color.GREEN); 
      Blue.setBackgroundColor(Color.GREEN); 

     } 
    }); 

    Yellow.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      relativeLayout.setBackgroundColor(Color.parseColor("#FFDB58")); 
      Green.setBackgroundColor(Color.YELLOW); 
      Blue.setBackgroundColor(Color.YELLOW); 
      Red.setBackgroundColor(Color.YELLOW); 

     } 
    }); 

    Blue.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      relativeLayout.setBackgroundColor(Color.parseColor("#0047AB")); 
      Green.setBackgroundColor(Color.BLUE); 
      Yellow.setBackgroundColor(Color.BLUE); 
      Red.setBackgroundColor(Color.BLUE); 

     } 
    }); 
} 

} 



activity_main.xml

<Button 
    android:id="@+id/buttonyellow" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/buttongreen" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="40dp" 
    android:background="#FFDB58" 
    android:text="All Yellow" /> 

<Button 
    android:id="@+id/buttonred" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/buttongreen" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="38dp" 
    android:background="#DC143C" 
    android:text="All Red" /> 

<Button 
    android:id="@+id/buttongreen" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/buttonyellow" 
    android:layout_below="@+id/buttonred" 
    android:layout_marginTop="46dp" 
    android:background="#26D840" 
    android:text="All Green" /> 

<Button 
    android:id="@+id/buttonblue" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/buttonyellow" 
    android:layout_below="@+id/buttonyellow" 
    android:layout_marginTop="46dp" 
    android:background="#0047AB" 
    android:text="All Blue" /> 
</RelativeLayout> 


enter image description here



Теперь, когда вы нажимаете любую из buttons, то background-color и цвет все buttons изменение в соответствии с информацией, записанной на button. Вы можете повторно использовать код с правильным редактированием в соответствии с количеством кнопок и цветов, которые вы хотите.

+0

Проблема заключается не в том, как выбрать цвет. У меня есть 6 кнопок, и каждый из них имеет назначенный ему цвет. И то же самое касается фона. Моя проблема заключается в том, как изменить цвет всех кнопок в приложении, не делая этого один за другим ... – Rasmnev

+0

@ user3137018: Я отредактировал свой ответ. Пожалуйста, смотрите. – CodeWalker

+0

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

0

После отказа от этого и попытки одного подхода я столкнулся с другой проблемой. Здесь объясняется и ответ на этот вопрос Change layout background color on button click

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

Это не очень модно, потому что кнопки превращаются в один цветной прямоугольник, но пока этого мне достаточно.

Спасибо за помощь!

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