2011-04-13 5 views
3

ダイアログにGridViewを表示しようとしています。 GridViewの幅は、すべての努力にもかかわらず、列にラップするのではなく、画面全体に拡大します。レイアウトとその問題を示すイメージは次のとおりです(問題を説明するためにGridViewの背景色を設定しました)。Android:GridViewの幅はコンテンツにラッピングされませんか?

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/colorgridview" 
    android:background="#FF00CCBB" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:numColumns="4" 
    android:verticalSpacing="5dp" 
    android:horizontalSpacing="5dp" 
    android:columnWidth="70dp" 
    android:stretchMode="none" 
/> 

enter image description here

+0

固定layout_widthでそれを解決し ...同じ問題を抱えていました。 @ ab11 - GridViewをラップできましたか?私はダイアログでそれをラップしようとしています。今まで運がない。 – FireFly

+0

このトピックのExpandableGridviewを試したことがありますか?http://stackoverflow.com/questions/8481844/gridview-height-gets-cut –

答えて

1

この投稿は古くなっています。しかし、誰かがこれに対する解決策を必要とするなら、この答えは便利かもしれません。

画面の測定後にビューの幅を設定することができます。

クラスがOnGlobalLayoutListenerを実装してみましょう:これを行うには

。 画面は、onGlobalLayoutメソッドが呼び出されたときに測定されます。私たちはここで魔法を使うことができます。 GridView.getLayoutParams()。width = ....

編集: onGlobalLayoutListenerを追加する方法はあまり明確ではありませんでした。 plugmindの投稿を参照して、追加方法を示します。 Can't figure out how to get view/layout width/height

敬具、 ブラム

+1

この問題のためにGridViewを使用しなかったため、このソリューションをテストしませんでした。しかし、それは合理的と思われ、あなたは自信を持っているように見えるので、他の人がこれを見つけることができるように、私は答えとしてマークします。ありがとう! – ab11

+1

私は同じトリックを自分のアプリケーションでやったので、うまく動作すると確信しています。受け入れをありがとう:) – Bram

0

私はラップコンテンツは必要な最小限の場所を使用するので、あなたはandroid:layout_width="fill_parent"代わりのandroid:layout_width="wrap_content"を使うべきだと思います。一方、fill_parentは必要なすべての領域を使います。あなた以上のものは取り除かなければならない"android:columnWidth="70dp".

+0

しかし、列のサイズが制限されていて、ダイアログがその限られたサイズに折り返されたがります。私はそれが画面全体を埋めるのは嫌です。 – ab11

+0

ああ、私の間違いは申し訳ありません、私はそれを理解していませんでした。 android:layout_width = "wrap_content"でカスタムダイアログを作成しようとしましたか?私はわからないが、それは画面を埋めるDialogの大きさかもしれない。 – ClemM

+0

このリンクに書かれているように、私はDialogsだけが "wrap_content"だと確信しています:http://stackoverflow.com/questions/2961833/how-to-set-a-dialog-themed-activity-width-to-screen- width/2962168#2962168 – ab11

0

固定レイアウト容量(dp)を設定することは間違いありません。列の数も固定されているため、これは回避策ですか?

0

は、私はどちらか動作しませんオーバーライドされたonMeasure()

public class GridViewEx extends GridView { 

    private int mRequestedNumColumns = 0; 

    public GridViewEx(Context context) { 
     super(context); 
    } 

    public GridViewEx(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public GridViewEx(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void setNumColumns(int numColumns) { 
     super.setNumColumns(numColumns); 

     if (numColumns != mRequestedNumColumns) { 
      mRequestedNumColumns = numColumns; 
     } 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     if (mRequestedNumColumns > 0) { 
      int width = (mRequestedNumColumns * getColumnWidth()) 
        + ((mRequestedNumColumns-1) * getHorizontalSpacing()) 
        + getListPaddingLeft() + getListPaddingRight(); 

      setMeasuredDimension(width, getMeasuredHeight());  
     } 
    } 
} 
+0

それは動作しません –

関連する問題