Pregunta

Estoy trabajando en un diseño donde utilizo un ListView con elementos de línea RelativeLayout. Los mismos Elementos de línea no se muestran correctamente.

El problema es que el txtVideoDuration TextView se dibuja en la parte superior de la línea de pedido de la parte inferior. Debido a esto la txtVideoTitle consigue una altura de 0. Como se puede ver en el XML se supone que el txtVideoDuration para sujetarse a la parte inferior de la ListView.

Mi objetivo es que el diseño se parece al tutorial que google me dio. Ejemplo: http: //android-developers.blogspot. com / 2009/02 / android-layout-tricks-1.html

Estoy usando Android 2.0.1. Incluso he enchufado en el ejemplo de la disposición con la modificación a cabo en el ListView y el mismo comportamiento que pase.

<?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="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:id="@+id/imgVideoThumbnail"
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true"
    android:minHeight="64dip"
    android:layout_marginRight="6dip"
    android:src="@drawable/icon" />
<TextView 
    android:id="@+id/txtVideoDuration"
    android:layout_width="fill_parent"
    android:layout_height="26dip" 
    android:layout_toRightOf="@+id/imgVideoThumbnail"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:text="0:00:00" />
<TextView
    android:id="@+id/txtVideoTitle"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/imgVideoThumbnail"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_above="@+id/txtVideoDuration"
    android:layout_alignWithParentIfMissing="true"
    android:gravity="center_vertical"
    android:text="[Title]"
    android:textColor="#FFFFFF" />

</RelativeLayout>

funciona este caso sencillo. Ésta es la disposición XML raíz para la actividad. El código erróneo en la parte superior es la línea artículos en la vista de lista. Parece que el ListView en sí está rompiendo a él.

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ListView
    android:id="@+id/listVideoCatalog"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
<TextView
    android:id="@+id/txtName"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:text="Hello World" />
</RelativeLayout>
</merge>

Este es el Código getView que se infla el elemento de línea en el ListView.

    static class ViewHolder
{
    TextView txtTitle;
    ImageView imgThumbnail;
    TextView txtDuration;
    Uri videoLocation;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;

    if(convertView == null)
    {
        LayoutInflater li = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = li.inflate(R.layout.listitem_videolineitem, null);
        holder = new ViewHolder();
        holder.txtDuration = (TextView) convertView.findViewById(R.id.txtVideoDuration);
        holder.txtTitle = (TextView) convertView.findViewById(R.id.txtVideoTitle);
        holder.imgThumbnail = (ImageView) convertView.findViewById(R.id.imgVideoThumbnail);
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    VideoFile video = this.videos.get(position);
    holder.txtDuration.setText(millisToTimestamp(video.videoDuration));
    holder.txtTitle.setText(video.videoTitle);

            // Some debugger visual code.
    holder.txtDuration.setBackgroundColor(Color.GREEN);
    holder.txtTitle.setBackgroundColor(Color.CYAN);


    return convertView;
}
¿Fue útil?

Solución

¿Cómo estás inflando sus puntos de vista de registro que están "con errores"? ¿Puede proporcionar un fragmento de código?

Además, android:orientation="vertical" no es válida para RelativeLayout.

Otros consejos

Esta fue respondida en el Comentario de la respuesta aceptada. Sólo para que quede claro, esta es la respuesta:

Cambiar

li.inflate(R.layout.listitem_videolineitem, null);

a

li.inflate(R.layout.listitem_videolineitem, parent, false);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top