Establecer parámetros de diseño para un elemento dentro de una Galería

Estoy usando una Gallery para mostrar una línea de tiempo horizontal de eventos. Algunos de los eventos de Gravity.TOP y algunos Gravity.BOTTOM para alinearlos por encima o por debajo de una línea agradable que muestra los años. Hasta aquí todo bien.

Quiero cambiar la propiedad de margen izquierdo de los elementos en la parte superior, por lo que no hay grandes espacios y los elementos parecen intercalados. Por ejemplo: establecer un margen izquierdo negativo para cada elemento alineado en la parte superior.

Cada elemento de la Gallery consiste en un LinearLayout , que se puede configurar una instancia de MarginLayoutParams para cambiar los márgenes de forma programática. Sin embargo, estoy obteniendo un ClassCastException al usar MarginLayoutParams dentro del adaptador porque el código de Gallery hace esto:

  // Respect layout params that are already in the view. Otherwise // make some up... Gallery.LayoutParams lp = (Gallery.LayoutParams) child.getLayoutParams(); 

¿Alguna idea o sugerencia sobre cómo superar este problema?

Cada elemento de la Galería consiste en un LinearLayout

Simplemente envuélvalo usando otro LinearLayout y establezca el margen en el LinerLayout.LayoutParams para el LinearLayout interno. Lo he comprobado, y parece hacer lo que quieras.

Por lo tanto, el diseño que infla para el elemento Galería debe tener este aspecto:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layOuter" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/layInner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/imageView1" android:src="@drawable/icon" android:layout_height="wrap_content" android:layout_width="wrap_content" android:scaleType="fitXY" /> <TextView android:text="TextView" android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" /> </LinearLayout> </LinearLayout> 

Entonces usted puede tener acceso a LinearLayout interno en el método del getView adaptador y fijar el margen allí dependiendo de sus condiciones (código de la muestra sin la optimización de la reutilización del convertView):

 public View getView(int position, View convertView, ViewGroup parent) { Context context = getContext(); final float density = context.getResources().getDisplayMetrics().density; LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layOuter = inflater.inflate(R.layout.row_layout, null); View layInner = layOuter.findViewById(R.id.layInner); if (...) { // your condition LinearLayout.LayoutParams innerLP = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); innerLP.leftMargin = (int) (50 * density); layInner.setLayoutParams(innerLP); } return layOuter; } 

Tenga en cuenta que debe utilizar LinearLayout.LayoutParams (amplía MarginLayoutParams ) para el diseño interno, de lo contrario no funcionará.

Gallery.LayoutParams es una clase totalmente diferente que android.view.ViewGroup.LayoutParams.

Su vista secundaria (construida a partir del adaptador) es LinearLayout que devuelve un android.view.ViewGroup.LayoutParams, mientras que la Galería devuelve un archivo Gallery.LayoutParams.

Intente usar android.view.ViewGroup.LayoutParams en lugar de Gallery.LayoutParams. Si tiene que usar ambos, entonces manualmente establezca las propiedades de uno a otro cuando sea aplicable (aunque realmente no puedo pensar en una razón por la que necesitaría usar ambos).

  • Teclado Android que cubre el botón inferior
  • Android - acercar / alejar RelativeLayout con spread / pinch
  • Cómo personalizar chrisbanes / ActionBar-PullToRefresh o cambiar el color de pull a refresh bar
  • Android: diseño alternativo xml para el modo horizontal
  • Color de TextView muestra como blanco en un dispositivo real con ConstraintLayout
  • Deslizando un fragmento sobre otro en Android
  • La vista Wrap_content dentro de un ConstraintLayout se extiende fuera de la pantalla
  • Eclipse Layout Designer no puede abrir el archivo XML creado por IntelliJ
  • Barra de herramientas que se superpone debajo de la barra de estado
  • En Android cada pantalla debe ser su propia actividad o diseño?
  • ¿Cómo comprobar los indicadores de gravedad en una vista Android personalizada?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.