2009-12-13 9 views
13

私はRelativeLayout広告申込情報でListViewを使用するレイアウトで作業しています。ラインアイテム自体が正しく表示されていません。AndroidのRelativeLayoutが壊れているようです

問題は、txtVideoDuration TextViewが下端ではなく上端に描画されることです。このため、txtVideoTitleの高さは0になります。XMLでわかるように、txtVideoDurationはListViewの下部に固定されています。

私の目標は、レイアウトがGoogleが私に与えたチュートリアルに似ていることです。例: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コードです。

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; 
} 

答えて

10

「バグのある」行ビューをどのように膨らませていますか?コードスニペットを提供できますか?

また、android:orientation="vertical"RelativeLayoutには無効です。

+0

変更

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

だけでコードを追加しました。私はGoogleが提案したViewHolderパターンを使用しています。 –

+0

RelativeLayoutからorientaton verticalを削除しました。そのコードはバグに寄与しませんでしたが、それを指摘してくれてありがとう。私はそれを削除した。 –

+7

変更li.inflate(R.layout.listitem_videolineitem、null); 〜li.inflate(R.layout.listitem_videolineitem、parent、false);それが役立つかどうかを確認してください。 – CommonsWare

15

これは受け入れられた回答ののコメントで回答されました。ただ、それを明確にするために、これが答えです:

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

関連する問題