2016-10-27 8 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> 

지금 내가 원하는 사용자에게 배경색을 변경하는 옵션을 제공하는 기능을 추가하십시오. 거기에가는 대신에 어떤 값을 기반으로 소스 모양 drawable을 바꿀 수있는 빠른 방법이 있나요? 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 드로어 블)를 변경하고 싶습니다. – 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