2015-10-23 24 views
6

Tôi muốn để có thể thay đổi màu sắc nền của ứng dụng của tôi vì vậy bất cứ khi nào tôi muốn thay đổi màu sắc trong thời gian chạy, tôi chỉ có thể nhấn một nút trong ứng dụng để thay đổi màu nền. Sau khi thay đổi màu sắc tôi muốn rằng nó nên ở lại đó bất cứ khi nào tôi mở ứng dụng một lần nữa. Ngoài ra tôi muốn biết làm thế nào để thay đổi màu sắc của các hoạt động khác trong khi tôi đang hoạt động khác. Cảm ơn trước. colors.xml tôi:Làm thế nào để thay đổi màu nền của ứng dụng vĩnh viễn

<resources> 
<color name="original">#25383C</color> 
<color name="grey">#484849</color> 
<color name="red">#881A27</color> 
<color name="orange">#ffa500</color> 
<color name="yellow">#CDE707</color> 
<color name="green">#00ff00</color> 
<color name="aqua">#00FFCC</color> 
<color name="marine">#0C0C84</color> 
<color name="purple">#630A86</color> 
<color name="silver">#c0c0c0</color> 

styles.xml (nó có chủ đề):

<resources> 
<style name="original"> 
    <item name="android:background">#25383C</item> 
</style> 
<style name="grey"> 
    <item name="android:background">#484849</item> 
</style> 
<style name="red"> 
    <item name="android:background">#881A27</item> 
</style> 
<style name="orange"> 
    <item name="android:background">#ffa500</item> 
</style> 
<style name="yellow"> 
    <item name="android:background">#CDE707</item> 
</style> 
<style name="green"> 
    <item name="android:background">#00ff00</item> 
</style> 
<style name="aqua"> 
    <item name="android:background">#00FFCC</item> 
</style> 
<style name="marine"> 
    <item name="android:background">#0C0C84</item> 
</style> 
<style name="purple"> 
    <item name="android:background">#630A86</item> 
</style> 
<style name="silver"> 
    <item name="android:background">#c0c0c0</item> 
</style> 

+6

Bạn có thể sử dụng Android Shared Tùy chọn để nhớ màu nền đã chọn cho ứng dụng. Mỗi khi bạn mở ứng dụng, bạn có thể kiểm tra giá trị của tùy chọn được chia sẻ và áp dụng màu phù hợp. Sử dụng một lớp hoạt động cơ sở chung mà tất cả các hoạt động khác sẽ lấy được và trong các phương pháp "OnCreate" và "OnResume" viết mã để đọc được chia sẻ pref. và áp dụng trở lại màu nền. Cách này khi bạn mở bất kỳ hoạt động màu nền được lựa chọn sẽ được áp dụng. Bạn không cần phải thay đổi màu sắc hình thức một hoạt động khác – Deshan

Trả lời

2

Bạn có thể sử dụng Tùy chọn chia sẻ Android để ghi nhớ màu nền đã chọn cho ứng dụng. Mỗi khi bạn mở ứng dụng, bạn có thể kiểm tra giá trị của tùy chọn được chia sẻ và áp dụng màu phù hợp.

Sử dụng lớp hoạt động cơ sở chung mà tất cả các hoạt động khác sẽ lấy được và trong phương thức "OnCreate" và "OnResume" viết mã để đọc giá trị tùy chọn được chia sẻ và áp dụng lại màu nền. Cách này khi bạn mở bất kỳ hoạt động nào được chọn màu nền sẽ được áp dụng.

Hãy thử mã dưới đây, mã đã được kiểm tra và hoạt động.

BaseActivity Lớp

public class BaseActivity extends ActionBarActivity { 

     private static final String PREFS_NAME="color_settings"; 
     SharedPreferences prefsReader = null; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      prefsReader=getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
     } 

     @Override 
     public void setContentView(int layoutResID) { 
      super.setContentView(layoutResID); 
      setBackgroundColor(); 
     } 

     protected void setBackgroundColor() 
     { 
      int background_resource_id= prefsReader.getInt("background_resource_id",0); 
      View bgView= findViewById(R.id.main_container); 
      bgView.setBackgroundColor(getResources().getColor(background_resource_id)); 
     } 
     protected void setCurrentBackgroundColor(int colorResourceId) 
     { 
      SharedPreferences.Editor editor=getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit(); 
      editor.putInt("background_resource_id", colorResourceId); 
      editor.commit(); 
     } 
    } 

Hoạt động Lớp

public class MainActivity extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //save the color resource value in shared pref 
     setCurrentBackgroundColor(R.color.red); 

     setContentView(R.layout.activity_main); 


    } 


} 

Colors.xml danh sách màu

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="blue" type="color">#FF33B5E5</item> 
    <item name="purple" type="color">#FFAA66CC</item> 
    <item name="green" type="color">#FF99CC00</item> 
    <item name="orange" type="color">#FFFFBB33</item> 
    <item name="red" type="color">#FFFF4444</item> 
    <item name="darkblue" type="color">#FF0099CC</item> 
    <item name="darkpurple" type="color">#FF9933CC</item> 
    <item name="darkgreen" type="color">#FF669900</item> 
    <item name="darkorange" type="color">#FFFF8800</item> 
    <item name="darkred" type="color">#FFCC0000</item> 
</resources> 
+0

Cảm ơn! SharedPreferences chỉ hoạt động tốt! – programmingandroid

1

Để làm điều như vậy bạn có thể duy trì một cơ sở dữ liệu để lưu trữ các giá trị cho các màu sắc khác nhau.

Bây giờ, Bất cứ khi nào bạn nhấn nút sau khi chọn màu cụ thể cho ứng dụng của bạn, bạn chỉ cần cập nhật giá trị màu trong cơ sở dữ liệu của mình.

Trong phương thức onCreate() của MainActivity (Launcher Activity), bạn chỉ cần lấy giá trị màu từ trường cơ sở dữ liệu và có thể đặt nó trong ứng dụng của bạn.

+0

Cơ sở dữ liệu cho những điều nhỏ như vậy! – Apurva

+0

Đó là trường hợp, Khi chúng ta muốn màu sắc khác nhau cho các lần xem khác nhau. Tạo thêm các phiên bản của SharedPreferences không phải là cách đúng để làm như vậy. –

Các vấn đề liên quan