سؤال

أنا أعمل على تخطيط حيث يمكنني استخدام ListView مع عناصر خط Relativelayout. لا يتم عرض السقف أنفسهم بشكل صحيح.

المشكلة هي أن يتم رسم النص TXTVIVEDODEDUTION في الجزء العلوي من عنصر السطر بدلا من الأسفل. بسبب هذا txtvideotitle يحصل على ارتفاع 0. كما ترون في XML من المفترض أن يتم فرض txtvideodouration إلى أسفل ListView.

هدفي هو الحصول على تخطيط يشبه البرنامج التعليمي الذي أعطاني جوجل. مثال: http://android-developers.blogspot.com/2009/02/Android-layout-tricks-1.html.

أنا أستخدم Android 2.0.1. لقد قمت أيضا بتوصيل تخطيط المثال مع التعديل في ListView ونفس السلوك يحدث.

<?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>

هذه الحالة البسيطة تعمل. هذا هو تخطيط XML الجذر للنشاط. رمز عربات التي تجرها الدواب في الأعلى هي عناصر الخط في عرض القائمة. يبدو أن ListView نفسها تقطعها.

<?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>

هذا هو رمز GetView الذي يقوم بإنفخ عنصر السطر في 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;
}
هل كانت مفيدة؟

المحلول

كيف تتضخم وجهات نظر صفك التي هي "عربات التي تجرها الدواب"؟ يمكنك تقديم مقتطف رمز؟

أيضا، android:orientation="vertical" غير صالح RelativeLayout.

نصائح أخرى

تم الرد على ذلك في تعليق الإجابة المقبولة. فقط لجعل الأمر واضحا، هذه هي الجواب:

يتغيرون

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

ل

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top