studio programacion herramientas fundamentos crear con avanzado aplicaciones android

programacion - En Android, ¿cómo hacer espacio entre los niños de LinearLayout?



manual android studio avanzado (9)

Estoy agregando programáticamente vistas personalizadas a LinearLayout vertical, y me gustaría que haya espacio entre las vistas. He intentado agregar: setPadding (0, 1, 0, 1) a mi constructor de CustomView, pero esto no parece tener ningún efecto. ¿Algún consejo?

* Se señaló que debería usar márgenes. Como estoy agregando vistas dinámicamente, necesito establecer los márgenes desde el código (no en xml). Creo que la forma de hacerlo es la siguiente, pero no está funcionando.

public class MyView extends View { public MyView (Context context) { super(context); MarginLayoutParams params = new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(0, 10, 0, 10); setLayoutParams(params);

*Editar. También intenté usar MarginLayoutParams como parámetro al agregar las vistas al diseño lineal (como se muestra a continuación). Esto tampoco funcionó:

MarginLayoutParams params = new MarginLayoutParams(linearLayout.getLayoutParams()); linearLayout.setMargins(0, 10, 0, 10); linearLayout.addView(view, params);

Gracias.


Android ahora admite agregar una vista de Space entre vistas. Está disponible desde 4.0 ICS en adelante.


Debes android:layout_margin<Side> en los niños. El relleno es interno.


Desde el Nivel 14 de API, puedes simplemente agregar un separador de divisor (transparente):

android:divider="@drawable/divider" android:showDividers="middle"

¡y se encargará del resto por ti!


El ejemplo siguiente simplemente hace lo que necesita programáticamente. He usado un tamaño fijo de (140,398).

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(140, 398); layoutParams.setMargins(24, 0, 24, 0); layout.addView(button,layoutParams);


La API> = 11 solución:

Puede integrar el relleno en el divisor. En caso de que no usara ninguno, simplemente cree un LinearLayout vacío alto y LinearLayout como el divisor de LinearLayout :

<LinearLayout android:showDividers="middle" android:divider="@drawable/empty_tall_divider" ...>...</LinearLayout>

empty_tall_divider.xml:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <size android:height="40dp" android:width="0dp"/> </shape>


Puede obtener los LayoutParams de LinearLayout y aplicarlos a las vistas individuales de esta manera:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.setMargins(8,8,8,8);

  • Tenga cuidado de que setMargins () tome píxeles como tipo de datos int. Por lo tanto, convierta a dp antes de agregar valores
  • El código anterior establecerá alto y ancho para wrap_content. puedes personalizarlo

Si usa ActionBarSherlock , puede usar com.actionbarsherlock.internal.widget.IcsLinearLayout:

<com.actionbarsherlock.internal.widget.IcsLinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:divider="@drawable/list_view_divider" android:dividerPadding="2dp" android:showDividers="middle" > ... </com.actionbarsherlock.internal.widget.IcsLinearLayout>


Usar relleno en el diseño de Child View.

layout.xml

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@drawable/backage_text" android:textColor="#999999" > </TextView>

backage_text.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white"/> <corners android:radius="2dp"/> <stroke android:width="1dp" android:color="#999999"/> <padding android:bottom="5dp" android:left="10dp" android:right="10dp" android:top="5dp" /> </shape>


Use LinearLayout.LayoutParams lugar de MarginLayoutParams . Here''s la documentación.