2013-08-12 4 views
3
나는 누군가가 내가 현재 경험하고이 실망 문제를 도와 줄 수 있기를 바랍니다

:문제 프로그래밍

final Button btn_footer = (Button)findViewById(R.id.btn_footer); 
btn_footer.setBackground(new MyStateListDrawable(this)); 

: 나는 프로그램 내 버튼 중 하나에 StateListDrawable를 추가하려고 MyStateListDrawable 클래스 자체는 두 개의 LayerDrawable을 추가합니다. 하나는 버튼의 일반 상태이고 하나는 버튼이 비활성화되거나 눌린 상태 일 때 표시됩니다.

public class MyStateListDrawable extends StateListDrawable { 

    public MyStateListDrawable(Context c) { 
     addState(new int[] {-android.R.attr.state_pressed, -android.R.attr.state_enabled}, getStateDrawable(c,false)); 
     addState(new int[] {android.R.attr.state_pressed, android.R.attr.state_enabled}, getStateDrawable(c,true)); 
    } 
... 

LayerDrawables은 MyStateListDrawable 클래스의 방법 getStateDrawable 만들어집니다

이제
... 
    public Drawable getStateDrawable(Context c, boolean isTransp){ 
     GradientDrawable shadowGradient = new GradientDrawable(); 
     GradientDrawable buttonGradient = new GradientDrawable(); 
     [...] 

     Drawable[] drawableArray = {shadowGradient, buttonGradient}; 
     LayerDrawable layerDrawable = new LayerDrawable(drawableArray); 

     if(isTransp) 
      layerDrawable.setAlpha(0x88); 

     return layerDrawable; 
    } 
} 

, 나는 버튼의 기본 상태가 제대로 렌더링되는 활동을 실행할 때,하지만 난 해제하려고하면 스타일이 두 번째 LayerDrawable로 변경되지 않는 버튼을 누르십시오. 내 버튼에 XML 파일을 통해 속성을 추가하면 제대로 작동하지만 현재는 이미 30 개 이상의 XML 파일 (색상 또는 크기와 관련하여 스타일이 약간 변함)이 있으며 동적으로 하나씩 만들 수 있습니다. 모든 버튼에 대한 클래스. 아무도이 문제의 원인을 알고 있습니까?

답변

0

마침내이 문제로 돌아갈 시간을 찾았습니다. 다른 가능성을 많이 시도한 후에는 각 상태 (단추를 눌렀을 때와 사용할 수 없을 때)마다 동일한 드로어 블 (!)을 개별적으로 추가하는 작업을했습니다. 다른 주들은 다른 주에 대해 와일드 카드로 추가 된 드로어 블을 통해 다룹니다.

public MyStateListDrawable(Context c) { 
    addState(new int[] {android.R.attr.state_pressed}, getStateDrawable(c, true)); 
    addState(new int[] {-android.R.attr.state_enabled}, getStateDrawable(c, true)); 
    addState(StateSet.WILD_CARD, getStateDrawable(c, false)); 
} 
....