2016-05-15 13 views
0

私はAndroidアプリケーションを開発しています。固定幅と特定の行数の2つの列を持つグリッドビューから構成されたレイアウトを作成する必要があります。固定幅と応答高さを持つグリッドビュー

グリッドビューはイメージから構成され、グリッドの各「正方形」にイメージがあります。サイズは画面のサイズと正確に一致する必要があります。スクロールすることで視覚化したくありません。

長さは固定できましたが高さは固定できませんでした。どのように私のグリルが私が指定したサイズを持っていることを確認できますか?

これは私のレイアウトである。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="am.MainActivity" 
    tools:showIn="@layout/activity_main"> 

    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/gridview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:numColumns="2" 
     android:verticalSpacing="4dp" 
     android:horizontalSpacing="8dp" 
     android:stretchMode="columnWidth"/> 
</RelativeLayout> 

これはJavaコードである:

GridView gridview = (GridView) findViewById(R.id.gridview); 
      gridview.setAdapter(new ImageAdapter(this)); 


    public class ImageAdapter extends BaseAdapter { 
     private Context mContext; 

     public ImageAdapter(Context c) { 
      mContext = c; 
     } 

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

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

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

     // create a new ImageView for each item referenced by the Adapter 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView; 
      if (convertView == null) { 

       DisplayMetrics dm = new DisplayMetrics(); 
       getWindowManager().getDefaultDisplay().getMetrics(dm); 
       int width = dm.widthPixels/2; 

       imageView = new ImageView(mContext); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
       imageView.setLayoutParams(new GridView.LayoutParams(width, width)); 

      } else { 
       imageView = (ImageView) convertView; 
      } 

      imageView.setImageResource(mThumbIds[position]); 
      return imageView; 
     } 

     // references to our images 
     private Integer[] mThumbIds = { 
       R.drawable.bacheca, R.drawable.turni, 
       R.drawable.utility, R.drawable.contatti, 
       R.drawable.invia, R.drawable.info 
     }; 
    } 

出力幅(画面サイズに含まれる二つの画像)が、高さのために完全です画面上のすべてを持っているときにスクロールを有効にするので間違っています

+0

を使用すると、応答によって何を意味するか、あなたがラップコンテンツの高さを与えている場合は...それはコンテンツによって調整されます –

答えて

0

ここでの答えに記載されているように - Gridview with two columns and auto resized images

あなたはこの

public class SquareImageView extends ImageView { 
    public SquareImageView(Context context) { 
     super(context); 
    } 

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

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

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width 
    } 
} 

用のカスタムImageViewのを作ることができますし、グリッドのすべての行をしたい場合は、その後、なぜ画面に表示

<package_that_contains_SquareImageView.SquareImageView 
    android:id="@+id/picture" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="centerCrop"/> 
0

としてあなたのグリッドビューのセルレイアウトでこれを使用しますあなたはこのコード行を使用しますか?

imageView.setLayoutParams(new GridView.LayoutParams(width, width)); 

これは、imageViewを四角形にします。だからあなたの画面の高さに合っていない!

その後、LayoutParamsに設定し、(幅測定と同じ)、画面の高さを測定してください:

imageView.setLayoutParams(new GridView.LayoutParams(screenWidth/numOfColumn, screenHeight/numOfRow)); 
関連する問題