[Android] CustomView attr 속성에 다중 값(multi value) 설정 방법
2021. 5. 26. 13:04ㆍ모바일/Android_Java
CustomView attr 속성에 다중 값(multi value) 설정 방법
CustomTopNavigation 속성중에 뒤로가기만 보여줄지, Close 버튼을 보여줄지 설정을 할 수 있는 style attr이 있다
attr
<declare-styleable name="TOPNAVI">
<attr name="tnb_style">
<flag name="back" value="0x01" />
<flag name="close" value="0x11" />
<flag name="test" value="0x30" />
</attr>
</declare-styleable>
위와같은 attr이 있을때
커스텀 뷰 설정하고있는 xml
<TOPNAVI
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/setting_env"
app:tnb_style="back|close" >
</TOPNAVI>
뒤로가기, 닫기버튼을 같이 보여주고 싶으면 위와 같이 사용한다
자바코드
if (null != attrs) {
// 안드로이드 기본 스키마 어트리뷰트가 설정된 경우 (문구만 적용한다)
int textResId = attrs.getAttributeResourceValue(ANDROID_SCHEMA, "text", 0);
String text = "";
if (textResId == 0) {
text = attrs.getAttributeValue(ANDROID_SCHEMA, "text");
} else {
text = context.getString(textResId);
}
mTitleText.setText(text);
// 커스텀 스키마 어트리뷰트가 설정된 경우
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.HMTNB, 0, 0);
int n = array.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = array.getIndex(i);
switch (attr) {
case R.styleable.HMTNB_tnb_style:
int style = array.getInt(attr, TNBStyle.NORMAL.getStyle());
setStyle(style);
break;
}
}
}
app:tnb_style값에 2가지 속성을 추가하고 싶었는데 위 자바코드에서 int style 값이 계속 17(10진수)로 세세팅이 되어서 안드로이드 오픈소스를 찾아봐도 해결하지 못했었다 ㅠㅠ
그런데 생각이 들었던게 16진수를 사용하고, or 연산이 있으면 각각의 16진수를 or연산하여 코드에서 활용하지 않을까 해서 확인해보니
16진수 | 10진수 | or연산 |
---|---|---|
0x01 | 1 | 0x01 | 0x11 = 17 |
0x11 | 17 | 0x01 | 0x30 = 49 |
0x30 | 48 |
이런 패턴대로 다중 속성을 설정해줘야 했다..
그렇기 때문에 다중 속성을 설정해야 한다면 attr에 16진수값이 중복되지 않게 잘 셋팅해줘야한다.
'모바일 > Android_Java' 카테고리의 다른 글
app:mutldexDebug 에러 (0) | 2021.06.02 |
---|---|
[Android] maven jcenter vs mavenCentral (0) | 2021.06.02 |
[Android] 프래그먼트 데이터 공유(Not MVVM)2 (0) | 2021.05.25 |
[Android] button onclick in LinearLayout not working (0) | 2021.05.25 |
[Java] JAVA String 메소드중 Replace로 괄호()와 점.을 치환하려 할때 (0) | 2021.05.20 |