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.
- Cómo tener selectableItemBackground en Imageview?
- ¿Es posible guardar layout_weight en un xml?
- Después de Upate Android SDK - Diseño no se muestra
- Google Maps v3 MapView no toma todas las vistas de los padres en Android
- Animación de diapositivas entre vistas de un ViewFlipper
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?
- el enlace de datos; la etiqueta de la vista no es correcta, Android
- Android agrega imagen de flecha a spinner
- Obtener el número de teléfono en formato XXX-XXX-XXXX desde el cuadro edittext en android
- Cómo mostrar el diseño moviéndose de izquierda a derecha con velocidad lenta
- Android XML: android: elevación vs. aplicación: elevación
- Eficiencia de findViewById
- Android Lollipop: ImageView ignorando el atributo fitsSystemWindows (barra de estado transparente)
- Ejecutar AVD está dando error
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).
- Java.lang.SecurityException: Requiere READ_PHONE_STATE: Ni el usuario 10210 ni el proceso actual .. sólo en los teléfonos HTC
- Cómo vivir la transmisión desde Android