Android RelativeLayout parece roto
-
19-09-2019 - |
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;
}
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);