8

GridViewJava クラスでプログラムを作成しようとしていますが、すべて正常に動作します。問題は、 の周囲に自動生成された 5 ピクセルのパディングGridViewです。xml では、次を使用して削除できます。

android:listSelector="@null"

しかし、Javaで同様のことを行うことはできません。GridView実際の画面よりも 10 ピクセル大きくするなど、いくつかの回避策を試しましたが、うまくいきませんでした。

誰もこれのためのコードを持っていますか?

編集:

私の答えは問題を解決しません。懸賞金はまだあります。これが私のGridViewコードです:

    GridView gridView = new GridView(this);
    gridView.setNumColumns(someInt);
    gridView.setAdapter (new MyCustomAdapter(this));
    gridView.setLayoutParams(new GridView.LayoutParams(
            customValue,
            LayoutParams.FILL_PARENT,
            Gravity.CENTER_HORIZONTAL)
    );
4

7 に答える 7

6
  • 異なる密度の画面でパディングが同じように表示されるようにする 1 つの方法は、パディングを DIP 単位に変換することです。

    int padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -5, 
                                        getResources().getDisplayMetrics());
    
  • あなたが試すことができる他のことは、xmlでnullドローアブルを定義することです..

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <drawable name="null_drawable">@null</drawable>
        ...
    </resources>
    

    それから電話するsetSelector(R.drawable.null_drawable);

アップデート:

  • GridView独自のxmlであなたを定義し、それを膨らませます。

    レイアウト/mygrid.xml

    <?xml version="1.0" encoding="utf-8"?>
    <GridView 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:listSelector="@null"/>
    

    ジャバでは、

    GridView gridView = (GridView)inflater.inflate(R.layout.mygrid, null);
    gridView.setLayoutParams(new GridView.LayoutParams(customValue, 
                            LayoutParams.FILL_PARENT));
    gridView.setNumColumns(someInt);
    gridView.setAdapter (new MyCustomAdapter(this));
    
于 2012-09-22T15:50:36.637 に答える
2

次の方法で解決しました:

    gridView.setPadding(-5, 0, -5, 0);

ただし、画面ごとに異なるパディングが必要です。しかし、それは完全な解決策ではありません。このコードの機能変更は受け入れられます。

于 2012-08-27T17:26:43.270 に答える
2

を使用するのと同じ効果を得るには、コードでは、marvinX​​XII が述べたようにsetSelector()android:listSelector="@null"を使用する必要があります。ただし、有効な ResourceId を渡すか、バリアントを使用する必要があります。残念ながら、NullPointerException が発生するため、そのメソッドに渡すことはできません。ここで説明されている回避策は、これを使用することです。setSelector(Drawable sel)null

gridView.setSelector(android.R.color.transparent);
于 2012-09-21T19:43:49.173 に答える
1

動的グリッドビューの作成中に setPadding を使用してその問題を解決できると思います。

int grids_height = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP, (int) (Row_num * 80),
            getResources().getDisplayMetrics());
    Log.v("", "" + grids_height);
    gridview = new GridView(this);
    gridview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            grids_height));
    gridview.setPadding(0, 3, 0, 0);
    gridview.setBackgroundColor(Color.TRANSPARENT);
    gridview.setNumColumns(7);
    gridview.setVerticalSpacing(1);
    gridview.setHorizontalSpacing(1);
    gridview.setGravity(Gravity.CENTER_HORIZONTAL);
    gridview.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
于 2012-09-26T11:17:49.257 に答える
0

この質問を見たことがありますか? Android GridView の周りに余分なピクセルがあるのはなぜですか? ? その場合の問題は、グリッドビューでセレクターとして使用されている画像にパディングがあることでした。

その質問から提案された解決策をプログラムで適用すると、セレクターを設定できます

gridView.setSelector(android.R.color.transparent)
于 2012-09-26T14:54:23.550 に答える
0

次の設定を使用するとうまくいきます:

public ContactContainer(Context context, AttributeSet attrs) {
    super(context, attrs);
    gallery = new GridView(context, attrs);
    gallery.setNumColumns(numColumns);
    gallery.setStretchMode(stretchMode);
    gallery.setSmoothScrollbarEnabled(smoothScrollbar);
    gallery.setSelector(listSelector);
    gallery.setGravity(Gravity.CENTER_HORIZONTAL);
    this.addView(gallery);
}

この xml コードと組み合わせて使用​​します。

<de.ramicro.SClip.components.ContactContainer
    android:id="@+id/gridview_gallery_contacts"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/contact_gallery_bottom_bar"
    android:layout_below="@id/contact_gallery_top_bar"
    android:padding="0dip"/>

必要なのは、おそらく透明なセレクターと CENTER_HORIZONTAL に設定された重力の組み合わせだと思います。

于 2012-09-26T17:34:36.667 に答える
0

setSelector(int) (from AbsListView) お探しのものではありませんか?

お気に入りsetSelector(0)

于 2012-09-21T14:54:09.020 に答える