2011-04-05 11 views
17

La siguiente pregunta me ha mantenido perplejo por un tiempo y pensé que tal vez preguntar acerca de esto no causa ningún daño. Tengo los siguientes archivos layout.xml y style.xml;Definir identificadores con estilo, ¿es seguro o es un desastre?

res/layout/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/valores/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> 

Ahora, la pregunta es, ¿existe el peligro de IDs de superposición como estoy introduciendo ellos en style.xml? Lo curioso es que este enfoque funciona, en el emulador que estoy utilizando al menos, pero los ID creados no se están agregando a la clase R. Y estoy un poco confundido sobre cómo se definen una vez que mi diseño está inflado.

Respuesta

0

lo estoy haciendo de esta manera y he tenido buena suerte:

Disposición 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> 

común: 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> 
+0

Esa es una opción que estaba considerando también. Pero al final pensé que tal vez declarar encabezado/pie de página por separado en cada layout.xml en los que los necesite me da cierta flexibilidad que vale la pena. Siempre que pueda reducir la cantidad de código de copiar/pegar en pocas líneas usando estilos que sí lo sean. – harism

0

No es seguro, amigo mío. Deberías usar una identificación diferente para diferentes archivos. Aquí el emulador no actuará problema. Lo entenderá porque para cada archivo xml hay un archivo único definido R.java automáticamente. Entonces el emulador lo entenderá muy fácilmente. Pero si necesita mejorar o editar el código para cualquier gradación ascendente, seguramente se confundirá con la identificación que pertenece a la disposición del archivo xml o con cuña. Así que proporcione una identificación única a cada widget de diseño. Será útil si proporciona la identificación incluyendo alguna etiqueta con el nombre de archivo respectivo.

Ejemplo: Si el nombre del archivo es filldetails.xml entonces usted puede utilizar id = @ + fd_name

Será útil conocer el caudal de aplicación.

17

No utilice @+id/... en los estilos.
@+id/... solo se puede usar en diseños.
De lo contrario, puede obtener Error executing apt: return code 139 durante la compilación.
Uso @id/... y generar identificadores de archivo de recursos con ayuda si es necesario: res/valores/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