2016-08-09 4 views
1

SOで何度も尋ねられましたが、GridViewのパディングを削除する方法はありますが、私のために働いている回答はありません。GridViewでパディングを削除する

私はGridViewを持っていて、グリッドレイアウトの列数とオーバーオール幅を設定しています。 66dp x 66dpサイズのアイテムが必要です。どういうわけか、項目は二乗されますが、66x66は小さくなり、周囲には巨大なパディングがあります。どうして?

int zz = .. // number of columns comes from outside 
gridview.setNumColumns(zz); 
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams)gridview.getLayoutParams(); 
linearParams.width=66*zz; 
gridview.setLayoutParams(linearParams); 

<HorizontalScrollView 
    android:id="@+id/horizontalScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="66dp" 
    android:layout_marginRight="0dp" 
    android:layout_marginLeft="108dp" 
    android:layout_marginBottom="0dp"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal"> 

     <GridView 
      android:id="@+id/gridView1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="0dp" 
      android:columnWidth="66dp" 
      android:gravity="center" 
      android:horizontalSpacing="0dp" 
      android:scrollbarAlwaysDrawHorizontalTrack="true" 
      android:scrollbarAlwaysDrawVerticalTrack="true" 
      android:scrollbars="horizontal" 
      android:stretchMode="none" 
      android:verticalSpacing="0dp" 
      android:listSelector="@null" 
      android:scaleType="centerCrop"> 

     </GridView> 

    </LinearLayout> 

</HorizontalScrollView> 

項目プロトタイプ

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="66dp" android:layout_height="66dp"> 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="66dp" 
     android:layout_height="66dp" 
     android:padding="0dp" 
     android:background="@android:color/holo_orange_light"/> 

</RelativeLayout> 

shreenは

enter image description hereショット そして画像:enter image description here

コンテンツ/画像をロードするためのアダプタを使用しました。

@Override 
public void onBindViewHolder(RatingHolder ratingHolder, int i) { 

    ratingHolder.icon.setImageResource(R.drawable.asdf); 
    //ratingHolder.icon.setAdjustViewBounds(true); 
} 
+0

画像をロードするためにどのようなコードを使用していますか? –

+0

アダプターを使用して以下のコードを追加しました –

答えて

0

ImageView使用しているが定義されscaleTypeを持っていません。

ImageViewのデフォルトはFIT_CENTERですが、使用している画像がビューの縦横比に完全に合っていない可能性があります。

あなたはおそらく

<ImageView 
     android:id="@+id/icon" 
     android:scaleType="centerCrop" 
     android:layout_width="66dp" 
     android:layout_height="66dp" 
     android:padding="0dp" 
     android:background="@android:color/holo_orange_light"/> 

アクション内のすべてのImageView.ScaleTypeの値の視覚的な例は、here

+0

チェック済み 'CENTER_CROP'は助けにならない、何か変更を加える –

+0

問題の原因となっている画像へのリンクを提供する可能性はありますか? –

+0

画像が投稿に追加されました –

0

ファーストを見つけることができ、あなたのニーズを満たすためにCENTER_CROPを必要とする、あなたはfill_parentを使用しないでください、それはに名前が変更されましたmatch_parent

第二に、このコード:

LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) gridview.getLayoutParams(); 
linearParams.width= 66 * zz; 
gridview.setLayoutParams(linearParams); 

は、本質的にあなたのGridViewwrap_contentの幅を設定しているので、代わりにXMLでそれを行います。また、画面の幅に基づいて列の数を設定する場合は、これをもっと簡単に行うことができます。 GridViewの幅をmatch_parentに設定し、numColumnsauto_fitに設定します。または、integers.xml値リソースを使用し、values,values-w600dpvalues-w840dpなどのリソース修飾子を使用して、異なる画面幅に整数を設定します。

次に、属性がGridView内にビューを中央に配置しようとしていることを考慮して、gravity="center"を設定すると、パディングの問題が発生する可能性があります。

最後に、ビューの不要なレイアウトをラッピングしています。任意のViewがXMLのベースになることができます。これらを「レイアウト」で囲む必要はありません。あなたのGridViewがより次のようになります。このような

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_view_1" 
    android:layout_width="wrap_content" android:layout_height="match_parent" 
    android:stretchMode="none" android:numColumns="@integer/column_number"/> 

そして、あなたのImageView

<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/icon" android:layout_width="66dp" android:layout_height="66dp" 
    android:scaleType="centerCrop"/> 

をこれらの変更は、すぐにあなたの問題を解決しないかもしれないが、彼らはで動作するようにあなたにもう少し扱いやすい何かを与えるだろう。

+0

画面の幅に基づいて列の数が設定されていないため、列の数が別のソースからのもので、 'GridView'は' LinearLayout'にあります。 'android:gravity =" center "'を削除しても効果はありません。 'GridView'を水平方向にスクロールしたいので' LinearLayout'が必要です。 –

+0

@János他の場所から来ていれば、 'gridView.setNumColumns()'を呼び出すことができます。設定した場合、他のコードは必要ありません'android:layout_width =" wrap_content "'となります。 – Bryan

+0

'GridView'は垂直方向にスクロールすることができますが、水平方向にもスクロールします。だから私は 'LinearLayout'を入れました。そして 'GridView'は100以上のカラムを持つことができます。 –

関連する問題