在风格中定义ID是安全还是灾难?

下面的问题让我感到困惑了一阵子,我想也许问这个没有什么坏处。 我有以下的layout.xml和style.xml文件;

RES /布局/ 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> 

RES /值/ 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中介绍它们? 有趣的是,这种方法在我至less使用的模拟器上起作用,但创build的ID不会被添加到R类中。 我有点困惑,一旦我的布局膨胀,他们是如何定义的。

Solutions Collecting From Web of "在风格中定义ID是安全还是灾难?"

不要在样式中使用@+id/...
@+id/...只能在布局中使用。
否则,您可以在构build期间获得Error executing apt: return code 139
使用@id/...并根据需要生成带有帮助资源文件的id:res / values / 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

我这样做,祝你好运:

布局res / layout / 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> 

常见:res / layout / 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> 

我的朋友不安全。 你应该为不同的文件使用不同的ID。 这里的模拟器不会有问题。 它会明白,因为每个XML文件都有自动定义R.java文件的唯一代码。 所以模拟器很容易理解。 但是,如果您需要改善或编辑任何向上渐变的代码,你会感到困惑哪个id属于哪个xml文件的布局或楔入。 因此,为布局的每个部件提供唯一的ID。 如果您提供包含相应文件名的一些标签的ID,将会有所帮助。

例如:如果文件名是filldetails.xml,那么你可以使用id = @ + fd_name

了解应用程序的stream程将会有所帮助。