15

グリッド ビューに表示される余分なパディングを削除したいと考えています。グリッド内のセルを占めるサイズ 128*128 の画像があります。しかし、どういうわけか、グリッドの内容に追加される余分なスペースがあります。

調査の結果、グリッド ビューの listSelector プロパティをオーバーライドする必要があることがわかりました。ここで質問です。ここで xml ドローアブルのようなものを指定する必要があることはわかっていますが、その中で何を指定すればよいのでしょうか?? パディングとストロークを 0dp に設定したシェイプ ドローアブルを使用してみましたが、役に立ちませんでした。

ここで質問と回答が行われていますが、drawable に含まれている必要があるものは指定されていません。

誰かがこれで私を助けることができますか?ありがとう!

編集: OK -ここに私が持っている UI のコピーがあります。XML レイアウトは次のとおりです。

<GridView android:id="@+id/GV_A2ZMenu" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:numColumns="4"
            android:layout_gravity="top" android:stretchMode="columnWidth"
    android:gravity="center" android:listSelector="@null" />

また、BaseAdapter クラスを使用して gridView を設定しています。そのコードは次のとおりです。

public class AtoZMenu extends BaseAdapter {

private static Context AppC;

private Integer[] MenuImg = { R.drawable.alphabet_a, R.drawable.alphabet_b,
        R.drawable.alphabet_c, R.drawable.alphabet_d,
        R.drawable.alphabet_e, R.drawable.alphabet_f,
        R.drawable.alphabet_g, R.drawable.alphabet_h,
        R.drawable.alphabet_i, R.drawable.alphabet_j,
        R.drawable.alphabet_k, R.drawable.alphabet_l,
        R.drawable.alphabet_m, R.drawable.alphabet_n,
        R.drawable.alphabet_o, R.drawable.alphabet_p,
        R.drawable.alphabet_q, R.drawable.alphabet_r,
        R.drawable.alphabet_s, R.drawable.alphabet_t,
        R.drawable.alphabet_u, R.drawable.alphabet_v,
        R.drawable.alphabet_w, R.drawable.alphabet_x,
        R.drawable.alphabet_y, R.drawable.alphabet_z };

public AtoZMenu(Context C) {
    AppC = C;
}

public int getCount() {
    return MenuImg.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView IV;
    float density = AppC.getResources().getDisplayMetrics().density;

    if (convertView == null) {
        IV = new ImageView(AppC);
        IV.setMaxHeight((int) (1));
    } else {
        IV = (ImageView) convertView;
    }
    IV.setImageResource(MenuImg[position]);
    return IV;
}
 }

あなたは間違いを見つけることができますか?

注:最終的に、より優れたグリッドをレンダリングするテーブル レイアウトに同様の画面を実装することになりました。

4

5 に答える 5

38

ええ、私は同じ問題を抱えていました。listSelector を @null に設定します。

<!-- Setting the listSelector to null removes the 5px border -->
<GridView
    android:id="@+id/view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:listSelector="@null" />

また、次のことを試してください。

myGridView.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);

XML でこれを行うことができるようですが、同じ問題が発生したときはできませんでした。理由がわからない。

また、キーの高さをハードコーディングしました。

float density = getContext().getResources().getDisplayMetrics().density;
mKeyHeight = (int) (56 * density);
....
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageButton b = (ImageButton) convertView;
    if (b == null) {
        b = new ImageButton(getContext());
        b.setMinimumHeight(mKeyHeight);
        b.setBackgroundResource(R.drawable.btn_keyboard_key);
        b.setOnClickListener(this);
    }
}

正確な回答ができなくて申し訳ありませんが、その後もサポートが必要な場合はお知らせください。

于 2011-07-30T00:15:17.010 に答える
2

ユーザーmvdsがここで言ったように、正しい答えは に設定android:listSelectorすることです。@android:color/transparent

于 2012-03-02T12:30:32.257 に答える
1

ショーンのソリューションのバリエーションを使用しました..エミュレーターで見栄えがします。

1) 列の数を決定します。私は 4 を選びました

2) 列幅を設定する

float xdpi = this.getResources().getDisplayMetrics().xdpi;
int mKeyHeight = (int) ( xdpi/4 );

GridView gridView = (GridView) findViewById(R.id.gridview); 
gridView.setColumnWidth( mKeyHeight );// same Height & Width

3) アダプターの getView メソッドでイメージをセットアップします

imageView = new ImageView( mContext );
// (xdpi-4) is for internal padding
imageView.setLayoutParams(new GridView.LayoutParams( (int) (xdpi-4)/2, (int) (xdpi-4)/2));
imageView.setScaleType( ImageView.ScaleType.CENTER_CROP );
imageView.setPadding(1, 1, 1, 1);

4) レイアウト

<?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:numColumns="4"
    android:verticalSpacing="0dp"
    android:horizontalSpacing="0dp"
    android:gravity="center"
    android:listSelector="@null"
/>
<!-- 
    android:columnWidth="90dp"  Specified in code 
    android:stretchMode="columnWidth" no noticable change
-->

それでおしまい。

于 2012-11-28T02:48:07.307 に答える
1

私も同じ問題を抱えていました。これを試して:

image.setLayoutParams(new GridView.LayoutParams(imageWidth , imageHeight)); imageView.setScaleType(ImageView.ScaleType.FIT_XY);.

画像に応じてパディングを追加します。それは私にとってはうまくいきました。

于 2014-12-05T17:20:11.837 に答える
0

私は同様の問題を抱えていましたが、私の場合、私の下部にかなり大きなパディング領域がありましたGridView(背景色で塗りつぶされていました)。
ここで問題の解決策を見ていないので、役立つ場合に備えてここに投稿します。

設定以外:

android:listSelector="@null"

私の GridView では、以下も設定する必要がありました。

android:fadingEdgeLength="0px"

または、Java の場合:

GridView.setFadingEdgeLength(0);
于 2013-09-19T19:56:14.237 に答える