이미지 버튼을 오버롤 할때
이미지폴더안에 button.xml <-- 이런 임의의 파일을 만든후
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/이미지2" />
<item android:drawable="@drawable/이미지1" />
</selector>
이런식으로 코딩한후
구현파일에서 이미지속성을 button 파일로 설정해주잖아요~
근데 오버롤할려는 이미지가 50개정도 된다는 상황이라면 50개 모두 개별적으로 button.xml을 button01.xml ~ button50.xml
까지 다 만들어야 하는건가요??
그냥 button.xml 파일하나로 50개 모두 설정할순없는지 해서 질문드립니다.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/이미지2" />
<item android:drawable="@drawable/이미지1" />
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/이미지4" />
<item android:drawable="@drawable/이미지3" />
</selector>
이런식으로 중복나열하니 안되더라구요~
선배님들의 조언이 필요합니다 ㅠ_ㅠ
알려주세요
개별적으로 해야할것 같내요.
저두 전부 개별적으로 해놓으면서도 생각을 못했던 부분이네요.
개별적이아니라면 id나 구분할수 있는 무언가가 있어야하는데 설정하는게 없는거봐선 개별적으로 해놓아야 하지 않을까요
모든 버튼류 selector의 룰이 같다면 StateListDrawable을 필요할때 생성해서 쓰는 방법도 생각해볼 수 있습니다.
하지만 이건 또 소스코드에 손이 적어도 한줄이상 들어가야 하고 리소스를 그때그때 챙겨야 하고,
결정적으로 xml에서 쓸수 없으니 좀 그렇긴합니다.
정석으로는 selector는 드로블이라 각각 다른 이미지를 적용하려면, 각각의 xml을 정의하는 방법밖에 없습니다.
윗분 말씀처럼 selector를 코드에서 정의(StateListDrawable사용)하는 방법이 그나마 나을거같네요...
int[] mResId = new int[3];
mResId[0] = R.drawable.arrow_press; //이런식으로 리소스아이디를 미리다 지정해두고
mResId[1] = R.drawable.arrow_disable;
mResId[2] = R.drawable.arrow_focus;
StateListDrawable getDrawableState(int id){
// 대략 이런 매서드를 만들어서 필요할때마다 아래와같이 사용하시는게 어떨까하네요
//버튼1.setBackgroundDrawable(getDrawableState(0));
//버튼2.setBackgroundDrawable(getDrawableState(1));
//버튼3.setBackgroundDrawable(getDrawableState(2));
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},getResources().getDrawable(mResId[id]));
states.addState(new int[] { }, getResources().getDrawable(R.drawable.arrow_normal));
return states;
}




아마 그건 개별적으로 해야 될 겁니다.