0

1 년 동안 이것을 알아 내려고 노력했습니다. 오래 전에 임시 해결 방법을 얻었지만 개발 한 앱에 새로운 기능을 추가 할 준비를 할 때 문제가 다시 발생했습니다.Android 앱에서 배경색을 동적으로 설정하는 방법은 무엇입니까?

주요 목표 : 사용자가 앱의 배경색으로 사용할 색상을 사실상 선택할 수있게하십시오.

현재 반복 : 나는 2 개의 드로어 블 이미지, 즉 하나의 녹색, 하나의 파란색을 가지고 있습니다. 사용자는이 사이를 전환 할 수 있지만 순위 :

if (bgColor) { 
     getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_blue_background_simple)); 
    } 
    else { 
     getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_green_background)); 
    } 
} 

bgColor가 사용자가 파란색으로, 기본 녹색에서 배경을 변경 한 경우 부울입니다.

는 지금은 컬러로 전환하기 위해 노력하고 있음을, 그리고 드로어 블, 나는 시도했다 :

LayoutInflater layInflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = layInflate.inflate(R.layout.main_activity_layout, null); 
    mainLayout = (RelativeLayout) view.findViewById(R.id.mainActivityRelativeLayoutId); 
    mainLayout.setBackgroundResource(R.color.colorRed); 

을하지만 아무것도하지 않습니다!

그럼 드로어 블 이미지와 같이 작동 시키려고하지만 컬러 (유형 int)는 드로어 블 유형이 아닙니다! 따라서이 코드는 작동하지 않습니다.

딜레마와 질문 : 색상 선택기 설정/환경 설정이 있습니다. 사용자는 거의 모든 색상을 선택할 수 있으며 int 유형의 색상으로 저장합니다. 성공적 텍스트 색상에 사용할 수 :

textView.setTextColor(colorPickerColor); 

colorPickerColor은 색상 선택기 환경에서 검색 int 형의 변수가

하지만, 레이아웃이나 뷰의 배경을 변경하는 것을 사용하려고 할 때, 그것은 아무것도하지 않는다. 상수/하드 코딩 된 색상을 설정해도 위의 코드와 같이 색상이 변경되지 않습니다. 색상을 사용하여 배경을 변경할 수있는 유일한 방법은 드로어 블 중 하나 (각 날의 선택 가능한 색상, 잠재적으로 수백만 또는 수십억 개의 드로어 블이 있어야하므로 드로잉을 할 수 있음) 또는 색상에 대한 16 진수 코드이지만 코드에 배치하면 아무 것도하지 않으므로 레이아웃의 XML에 하드 코딩됩니다 (사용자가 선택할 수 없기 때문에 전혀 유용하지 않습니다).

코드를 통해 프로그래밍 방식으로/동적으로 int 유형의 색상을 지정하여 레이아웃의 배경색을 변경하는 적절한 방법은 무엇입니까? 내 응용 프로그램이 지원하는 최소 API는 14

참고 : 검색했지만 모든 결과가 관련이 없거나 작동하지 않았습니다.

+1

'view.setBackgroundColor (int color)'시도해 보셨습니까? 예제 사용법 :'mainLayout.setBackgroundColor (0xFF000000);' – Isaac

+0

@Isaac이 맞습니다. FF가 완전히 불투명하다는 것을 기억하십시오. –

+0

@isaac 이것은 아무것도하지 않습니다. 이미 내가 한 일이 아닌가? –

답변

0

ColorDrawable이 귀하의 경우에 대한 해결책이 될 것입니다.

mainLayout.setBackgroundDrawable(new ColorDrawable(getResources().getColor(colorPickerColor))); 

이 좋은 말 setBackgroundDrawable이 있습니다,
mainLayout.setBackgroundDrawable(new ColorDrawable(colorPickerColor)); 

과 colorPickerColor 경우

는 컬러 자원 ID입니다 다음 colorPickerColor가 그리는 정수 색상 코드입니다, 배경은 다음 코드를 사용하여 설정할 수 있습니다 가정하자 메소드가 더 이상 사용되지 않으면 setBackground를 대신 호출 할 수 있습니다.

+0

새로운 ColorDrawable() 메서드를 사용하면 배경색이 변경되지 않고 bgColorPicker와 함께 변경되지 않습니다. 드로어 블 이미지를 어떻게 처리했는지와 똑같이 사용해야합니다. getWindow(). setBackgroundDrawable (new ColorDrawable (bgColorPicker)); 사용이 가능합니까 아니면 불량입니까? –

+0

@AeonPsych, 좋은 것이 든 나쁜 것이 든, 그것은 단지 당신의 경우에 달려 있습니다. 예를 들어 사용자가 색상을 선택하고 앱의 모든 활동에 적용하도록하려면 기본 활동에서 getWindow()로 설정하면 모든 활동이이 활동으로 확장됩니다. 더 많은 유연성을 원한다면, 예를 들어, 액티비티에서 여러 조각을 탐색 한 다음 mainLayout (예 : 레이아웃의 루트 요소 일 수 있음)에서이 방법으로 설정할 수 있습니다. 이렇게하면 응용 프로그램이 서로 다를 수 있습니다 다른 화면에서 색상. – CodePlay

+0

이상한데, 그저 레이아웃의 색상을 바꿀 수 없기 때문입니다. mainLayout.setBackgroundDrawable (새 ColorDrawable (colorPickerColor)); 나를 위해 작동하지 않습니다 롤. 어떤 이유로 getWindow() 함수를 변경했을 때만 작동합니다. –