with tag studio developer change cardview cards android xml android-framelayout android-lint

android - tag - Advertencia: este<FrameLayout> se puede reemplazar con una etiqueta<merge>



grid android layout (3)

¿Está utilizando esto como el diseño principal de su actividad? Si es así, puedes reemplazarlo con una etiqueta de combinación como esta:

<merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > ... a textview and 2 linearlayouts </merge>

En setContentView , Android tomará los elementos setContentView de la etiqueta de combinación y los insertará directamente en FrameLayout con @android:id/content . Examine ambos enfoques ( FrameLayout vs merge ) con HierarachyViewer para ver la diferencia.

Tengo un FrameLayout que contiene un TextView y dos LinearLayout s:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > ... a textview and 2 linearlayouts </FrameLayout>

Después de ejecutar Android Lint, recibo esta advertencia: This <FrameLayout> can be replaced with a <merge> tag.

¿Por qué existe esta advertencia? ¿Qué puedo hacer para solucionarlo (aparte de ignorar)?


Consulte this post por el chico Romain para más información. Te dice por qué se sugiere la opción de combinación.


Para comprender esto, es necesario comprender cómo se infla y se coloca el diseño.

Digamos, por ejemplo, que tienes una actividad y este es el xml de diseño que usas. Aquí se muestra el diseño de la actividad antes de colocar el archivo de diseño.

<FrameLayout // This is the window ... <FrameLayout> // This is activity </FrameLayout> </FrameLayout>

Puede haber algunas otras capas dependiendo del dispositivo / SO.

Ahora cuando inflas tu archivo de diseño y lo pones, así es como se verá.

<FrameLayout // This is the window ... <FrameLayout> // This is activity // Your layout below <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > ... a textview and 2 linearlayouts </FrameLayout> </FrameLayout> </FrameLayout>

¿Ves el FrameLayout dentro de un FrameLayout? Es redundante tener eso ya que no agrega mucho valor. Para optimizar, puedes reemplazar tu FrameLayout con un <merge>. Si lo usas, este es el aspecto que tendrá.

<FrameLayout // This is the window ... <FrameLayout // This is activity // Your layout below ... a textview and 2 linearlayouts </FrameLayout> </FrameLayout>

Observe que no hay FrameLayout extra. En su lugar, simplemente se fusiona con el FrameLayout de la actividad. Siempre que pueda, debe usar <fusionar>. Esto no solo se aplica a FrameLayouts. Puedes leer más sobre esto aquí. http://developer.android.com/training/improving-layouts/reusing-layouts.html#Merge

Espero que esto ayude.