0

gridView の列番号を変更しようとしています。ビューを更新するためにsetNumColumn()andを呼び出します。invalidateViews()

ただし、グリッドのセル幅は動的に変更されません。を設定しましたstretchMode="columnWidth"が、うまくいきませんでした。

スクリーンショット

4

3 に答える 3

3

問題が解決しました:

グリッド ビューの子ビューは、実行時にグリッド ビューが列を変更するときにレイアウトを再計算しません。

BaseAdapter では、 forceLayout() を呼び出してそのレイアウトを計算する必要があります。

@Override
public View getView(final int position, View convertView,
        ViewGroup parent) {


    if (null == convertView) {
        convertView = mInflater.inflate(
                R.layout.mnm_customer_user_thumbnail, null);

        control.txtUserName = (TextView) convertView
                .findViewById(R.id.mnmTxtStudentName);
        control.image = (ImageView) convertView
                .findViewById(R.id.mnmImageStudent);
        control.imageCheckBox = (ImageView) convertView
                .findViewById(R.id.mnmImageCheckBox);
        control.mnmOuterBounder = (RelativeLayout) convertView
                .findViewById(R.id.mnmOuterBound);
        convertView.setTag(control);
    } else {
        convertView.forceLayout();
    }

...
...
...
...

ありがとう

于 2012-10-30T08:13:41.523 に答える
2

Google http://developer.android.com/shareables/training/BitmapFun.zipが提供するこの素敵なサンプルを通じて助けを得ることができるかもしれません ImageGridFragment.java にある次のコードは、実行時に列番号の変更を動的に処理するために使用されますデバイスを回転させたときの画面の向きの変更など:

コメントは次のとおりです。このリスナーは、GridView の最終的な幅を取得し、列の数と各列の幅を計算するために使用されます。GridView には stretchMode=columnWidth があるため、各列の幅は可変です。列幅は各ビューの高さを設定するために使用されるため、正方形のサムネイルが表示されます。

mGridView.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    if (mAdapter.getNumColumns() == 0) {
                        final int numColumns = (int) Math.floor(
                                mGridView.getWidth() / (mImageThumbSize + mImageThumbSpacing));
                        if (numColumns > 0) {
                            final int columnWidth =
                                    (mGridView.getWidth() / numColumns) - mImageThumbSpacing;
                            mAdapter.setNumColumns(numColumns);
                            mAdapter.setItemHeight(columnWidth);
                            if (BuildConfig.DEBUG) {
                                Log.d(TAG, "onCreateView - numColumns set to " + numColumns);
                            }
                        }
                    }
                }
            });

    return v;
于 2013-01-23T08:01:27.510 に答える
0

xmlでは、この属性を提供する必要があります..

 android:stretchMode="columnWidth" . In your adapter depending on the size(by  `getCount()`) of the list colomn will create dynamically..
于 2012-10-30T05:15:05.440 に答える