2

レイアウトを膨らませてドラッグ可能なグリッドビューに追加しようとしていますが、黄色い正方形しか表示されません。ドラッグ可能なビューのaddView()メソッドは、単一のビューのみを取得します。たとえば、textViewまたはimageViewを追加すると、textviewが表示されます。線形レイアウトを追加すると、linearlayoutの背景(別名linearlayout)のみが表示されます。ただし、linearlayoutsの子(画像およびテキストビュー)はそうではありません。dgv(ドラッグ可能なGridview)はViewGroupを拡張します。コードは次のとおりです。

線形レイアウトの追加:

LayoutInflater inflater = LayoutInflater.from (getActivity ());
View cellView = inflater.inflate (R.layout.celllayout, null);
if (cellView != null)
Log.d ("Snap", "cellView != null");
TextView textView = (TextView) cellView.findViewById (R.id.grid_label);
textView.setText (word);
ImageView imageView =  (ImageView) cellView.findViewById (R.id.grid_image);
imageView.setImageBitmap (getThumb (word));

dgv.addView (cellView);

線形レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF000"
android:gravity="center"
android:orientation="vertical"
android:padding="5dp" >

<TextView
android:id="@+id/grid_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dip"
android:text="@string/grid_label"
android:textColor="#c31d36"
android:textSize="15sp" />
<ImageView
android:id="@+id/grid_image"
android:layout_width="150dip"
android:layout_height="150dip"
android:layout_gravity="center_horizontal"
android:contentDescription="An Image" 
android:background="#ffff0000"/>

</LinearLayout>

dgv:

@Override
public void addView (View child) {
    super.addView (child);
    Log.d ("Draggable", "Draggable-addView");

    newPositions.add (-1);
}

何か案は?より多くの情報を提供する必要がありますか?私の唯一の解決策は、imageviewをカスタマイズし、ondrawをオーバーライドして、必要なことを実行することです。しかし、それは非常にハッキーでスケーラブルではありません。どんな助けでもいただければ幸いです。

4

1 に答える 1

2

これはDraggableGridViewの既知の問題であり、残念ながら、修正に取り掛かっていません。私がDGVを書いたとき、私はビューがどのようにレイアウトされているかを完全には理解していませんでした。レイアウトする前に、DGVに各子を測定してもらうことをお勧めします。次のようなものを追加します。

getChildAt(i).measure(MeasureSpec.makeMeasureSpec(childSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(childSize, MeasureSpec.EXACTLY));

この行のレイアウトの前:

getChildAt(i).layout(xy.x, xy.y, xy.x + childSize, xy.y + childSize);
于 2012-12-04T22:22:53.537 に答える