마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

layout xml 파싱 질문입니다.

0 추천

현재 안드로이드 스튜디오에서 생성된 레이아웃 xml(예를들어 res/layout의 content_main.xml)파일을 파싱하려 합니다.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:id="@+id/textView" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_below="@+id/textView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="47dp" />

위와 같은경우에는 Button 안에 layout_width는 wrap_parent 이다.

이런형식의 데이터를 파싱하려합니다.

처음에는 XMLPullParser를 사용해서 파싱을 하였는데요.

문제점이 ""(큰따옴표)안에 데이터가 스트링형식이 아닌 define 되어있는 값으로 나옵니다(텍스트는 스트링으로 잘나오고요)

예를 들어서

android:id="@+id/button" 부분에서 파싱이되면(getAttribute 로 id 를 얻고, getAttributeValue로 그 값을 얻었습니다)

id 가 나오고 @+id/button이 나올줄알았지만, @2055598 처럼 특정 값이 나오고요(이 아이디를 다른곳에서 불러도 같은 @2055598 값이 나옵니다. 마치 define되어있는 값처럼요)

android:layout_height="wrap_content"이부분은  layout_height가 나오고 wrap_content가 아닌 -2값이 출력이 됩니다.

이문제를 해결하는 방법이나 혹시 다른 방법으로 레이아웃을 파싱하는 방법을 좀 알려주시면 감사하겠습니다.
 

 

scjh90 (120 포인트) 님이 2016년 1월 7일 질문

1개의 답변

0 추천
제가 보기엔 xml을 잘 못 여신게 아닌가 싶습니다.

@+id/button 이 @1234567.. 이런식으로 나오는건 질문자분 프로젝트의 gen 폴더에 생성되는 R.java 파일을 보시면 해당 값 즉 id 중 button 이라는 값이 상수로 1234567... 이런식으로 있을껍니다. 그 값이 찍힌거지요...

이 말은 원천 데이터(실제 xml)를 바로 여신게 아니라 누군가 중간 작업을한 데이터를 받아썻다고 볼 수 있겠지요.

wrap_content 역시 마찬가지 입니다.

해당값은 실제로 상수로 -2로 되어있는거구... android SDK 에 정의되어 있는 값입니다.(SDK 리소스 중 attrs.xml 에 있겠지요...)

 

결론은 파싱하시려는 xml 을 원본 상태로 열어서 사용하시면 됩니다.
비애천사 (12,080 포인트) 님이 2016년 1월 8일 답변
...