2011-04-05 4 views
17

다음 질문으로 인해 당분간 당황 스러웠습니다. 다음 layout.xml 및 style.xml 파일이 있습니다.ID를 스타일에 정의하면 안전 할까 재해입니까?

고해상도/레이아웃/layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <LinearLayout 
     style="@style/headerContainer" /> 
    <LinearLayout 
     style="@style/footerContainer" /> 
    <ScrollView 
     style="@style/contentContainer" />  
</RelativeLayout> 

고해상도/값/style.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="container"> 
    <item name="android:layout_width">fill_parent</item> 
    </style> 
    <style name="headerContainer" parent="container"> 
     <item name="android:layout_height">40dp</item> 
     <item name="android:layout_alignParentTop">true</item> 
     <item name="android:background">#80FF0000</item> 
     <item name="android:id">@+id/header</item> 
    </style> 
    <style name="footerContainer" parent="container"> 
     <item name="android:layout_height">50dp</item> 
     <item name="android:layout_alignParentBottom">true</item> 
     <item name="android:background">#8000FF00</item> 
     <item name="android:id">@+id/footer</item> 
    </style> 
    <style name="contentContainer" parent="container"> 
     <item name="android:layout_height">60dp</item> 
     <item name="android:layout_below">@id/header</item> 
     <item name="android:layout_above">@id/footer</item> 
     <item name="android:background">#800000FF</item> 
    </style> 
</resources> 

자, 질문은, ID를 중복의 위험 제가 도입하고있어로가 style.xml의 그것들? 재미있는 점은이 접근 방식이 적어도 필자가 사용하는 에뮬레이터에서 작동하지만 생성 된 ID는 R 클래스에 추가되지 않는다는 것입니다. 그리고 일단 레이아웃이 팽창되면 어떻게 정의되는지 혼란 스럽습니다.

답변

0

나는 이런 식으로 일을하고 행운 있었다 :

레이아웃 고해상도/레이아웃/main.xml에

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <include layout="@layout/action_bar"/> 
</RelativeLayout> 

공통 : 고해상도/레이아웃/action_bar.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/action_bar_container" 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/action_bar_height" 
    android:layout_alignParentTop="true" 
    android:paddingLeft="5dip" 
    android:paddingRight="5dip" 
    > 

    <TextView 
     android:id="@+id/action_bar_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:textSize="20dip" 
     android:textStyle="bold" 
     /> 

</RelativeLayout> 
+0

. 하지만 결국에는 머리말/꼬리말을 layout.xml에서 별도로 선언해도 문제가 될만한 유연성이 생깁니다. 만큼 스타일을 사용하여 몇 줄에 복사/붙여 넣기 코드의 양을 줄일 수있는만큼. – harism

0

안전하지 않은 내 친구. 다른 파일에는 다른 ID를 사용해야합니다. 여기서 에뮬레이터는 문제를 일으키지 않습니다. 모든 xml 파일에는 R.java 파일을 자동으로 정의한 고유 한 코드가 있기 때문에 이해할 수 있습니다. 따라서 에뮬레이터는 매우 쉽게 이해할 수 있습니다. 그러나 당신이 어떤 그라데이션을위한 코드를 개선하거나 편집해야한다면, id는 어떤 XML 파일의 레이아웃이나 쐐기 모양에 속하는지 혼란 스러울 것입니다. 그래서 레이아웃의 모든 위젯에 고유 ID를 제공하십시오. 해당 파일 이름의 태그가 포함 된 ID를 제공하면 도움이됩니다.

예 : 파일 이름이 filldetails.xml 경우 다음 ID를 사용할 수 있습니다 = @ + fd_name

응용 프로그램의 흐름을 알고 도움이 될 것입니다.

17

@+id/...을 스타일로 사용하지 마십시오.
@+id/...은 레이아웃에서만 사용할 수 있습니다.
그렇지 않으면 빌드 중에 Error executing apt: return code 139을 얻을 수 있습니다.
사용 @id/...하고 필요한 경우 도움말 리소스 파일로 ID를 생성합니다 고해상도/값/ids.xml을 :

내가 너무 고려하고 하나 개의 옵션입니다
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item type="id" name="header" /> 
    <item type="id" name="footer" /> 
</resources> 

http://developer.android.com/guide/topics/resources/more-resources.html#Id

관련 문제