2012-11-02 5 views
1

내 응용 프로그램에서 사용자가 배경색, 글꼴 크기를 선택하도록 허용하고 있습니다. 이들을 선택하면이 새로운 배경색이 활동 및 응용 프로그램의 각보기에 적용됩니다.응용 프로그램 테마의 속성을 프로그래밍 방식으로 android에서 편집하는 방법

그래서이 배경색을 변경하여 활동의 모든보기에 적용하는 방법은 무엇입니까?

응용 프로그램 테마 속성으로이를 구현하고 싶습니다. 즉, 변경된 색상은 내 앱이 실행될 때마다 내 앱의 각 활동보기에 반영되어야합니다.

간단한 방법이 있나요? 그렇지 않으면 각보기에 대한 배경색 속성을 개별적으로 설정해야합니다.

이 주제와 관련된 모든 게시물은 기존 테마 간 변경에 대해 논의합니다.

답변

0

사용자가 선택한 배경색을 얻으면 공유 미리보기에 저장할 수 있습니다. 그런 다음 각 액티비티의 onCreate에서 sharedpreference 값을 받고 백그라운드 색을 설정할 수 있습니다.

배경 색상을 설정하는 것은 간단하다

view.setBackgroundColor(Color.GREEN); 

가 된 SharedPreferences와 함께 작동하도록 :

SharedPreferences sp = getSharedPreferences("color", MODE_PRIVATE); 

String color = sp.getString("colorChoice", "BLACK"); 

위의 코드는 타입 된 SharedPreferences의 변수를 선언한다 : "색상"그룹 같다. 그런 다음 sp.getString()을 호출하는 String 변수를 선언합니다. "BLACK"이 기본값입니다.

가 된 SharedPreferences에 저장 : 사용자가 배경이되고 싶어 무슨 색깔 선택하면

Editor edit = sp.edit(); 
edit.putString("colorChoice", "Whatever the user selects here"); 
edit.commit(); 

위의 코드를 사용할 수 있습니다.

이제 액티비티의 모든 뷰에 대해 작업하려면 뷰를 인수로 가진 다음 (각 뷰에 대해이 메서드를 호출해야 함) 뷰 그룹을 사용하여 해당 뷰를 호출하는 메서드를 만듭니다. 어린이. 이런 식으로 뭔가 :이 방법은 배경 색상을 설정하지 않습니다

private void unbindDrawables(View view){ 
    if (view.getBackground() != null){ 
     view.getBackground().setCallback(null); 
    } 
    if (view instanceof ViewGroup){ 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++){ 
      unbindDrawables(((ViewGroup) view).getChildAt(i)); 

     }//for loop 
     try { 
      ((ViewGroup) view).removeAllViews(); 
     } catch (UnsupportedOperationException e) { 
      e.printStackTrace(); 
     } 
    } 

참고. 이는 뷰 그룹을 사용하고 각 뷰를 재귀 적으로 호출하는 예제 일뿐입니다. 위의 방법은 비트 맵의보기, 특히 비트 맵을 지우는 데 사용됩니다.

+0

현재 SharedPreferences에서 값을 설정하고 onCreate에서 값을 검색하고 설정하는 것과 동일한 작업을 수행하고 있습니다. 그러나 앞에서 언급했듯이 이것은 모든 관점에 대해 반복적으로 적용되어야합니다. 그래서 저는 그 작업을 줄이는 방법을 원합니다. – abhijitsinghh

관련 문제