2016-12-12 9 views
1

ImageViewの幅と高さがJavaコードから設定されている2列のgridViewを作成しようとしているため、携帯電話のサイズが異なっています。どのようにして私のグリッドビューをすべての画面にフィットさせることができますか?ここすべての画面に合わせてAndroid GridViewを作成する

ここに私のImageAdapterとxmlファイルである

import android.content.Context; 
import android.content.res.Resources; 
import android.util.TypedValue; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class ImageAdapter extends BaseAdapter { 


    private Context CTX ; 
    private ArrayList<Integer> imageId = new ArrayList<>(); 


    public ImageAdapter (Context ctx){ 
     this.CTX = ctx; 

     imageId.add(R.drawable.vegetablescata); 
     imageId.add(R.drawable.fruitscata); 
     imageId.add(R.drawable.fishcata); 
     imageId.add(R.drawable.meatcata); 
     imageId.add(R.drawable.ricecata); 
     imageId.add(R.drawable.oilcata); 
     imageId.add(R.drawable.bakerycata); 
     imageId.add(R.drawable.dairycata); 
     imageId.add(R.drawable.fastfoodcata); 
     imageId.add(R.drawable.softdrinkscata); 
     imageId.add(R.drawable.toiletresecata); 
     imageId.add(R.drawable.medecincata); 

    } 

    @Override 
    public int getCount() { 
     return imageId.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     String n = CTX.getResources().getResourceEntryName(imageId.get(position)); 
     return n; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView img; 
     if(convertView == null){ 
      img = new ImageView(CTX); 
      img.setLayoutParams(new GridView.LayoutParams(360, 360)); 
      img.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      img.setPadding(8,8,8,8); 
     }else{ 
      img = (ImageView) convertView; 
     } 
     img.setImageResource(imageId.get(position)); 

     return img; 
    } 

} 

は私のxmlファイルである

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.app.reza.test.testCategoriesFragment"> 

<!-- TODO: Update blank fragment layout --> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/gridView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnWidth="90dp" 
    android:numColumns="2" 
    android:verticalSpacing="2dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    android:layout_gravity="center"> 
</GridView> 

これはスクリーンショットですが、私はすべての電話サイズのthsiスクリーンショットと同じで欲しいです。

+0

スクロールビューにグリッドビューを配置します。 – Champandorid

+0

??この行はどうですか? img.setLayoutParams(新しいGridView.LayoutParams(360、360)); –

答えて

2
  1. あなたが使用するカスタムGridViewの イメージである場合は、カスタム寸法を渡していないすべての解像度描画可能なフォルダの確認プット画像を作ります。 のsrc/COM /例/ graphicstest/SquareImageView:あなたはすべての解像度を表示することができます その後、

    <GridView 
        android:id="@+id/gridview" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:verticalSpacing="0dp" 
        android:horizontalSpacing="0dp" 
        android:stretchMode="columnWidth" 
        android:numColumns="2"/> 
    
    activity_mainぴったりのサイズ

    otherwise 
    like this 
    

    を持ってそのアスペクト比を維持したカスタムImageViewのを確認します.java public class SquareImageView extends ImageView { public SquareImageView(コンテキストコンテキスト){ スーパー(コンテキスト)。 }

    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 
    } 
    
    }このSquareImageViewを使用して、グリッドアイテムのレイアウトを作成し、centerCropにscaleTypeを設定: RES /レイアウト/ grid_item.xml

    <com.example.graphicstest.SquareImageView 
        android:id="@+id/picture" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:scaleType="centerCrop"/> 
    
    <TextView 
        android:id="@+id/text" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:paddingLeft="10dp" 
        android:paddingRight="10dp" 
        android:paddingTop="15dp" 
        android:paddingBottom="15dp" 
        android:layout_gravity="bottom" 
        android:textColor="@android:color/white" 
        android:background="#55000000"/> 
    

    今あなたのGridView用の何らかの種類のアダプタを作成してください:

    SRC/COM /例/ graphicstest/MyAdapter.java

    プライベート最終クラスMyAdapterはBaseAdapterを拡張{ 民間最終リストmItems =新しいArrayListを()。 プライベートfinal LayoutInflater mInflater;

    public MyAdapter(Context context) { 
        mInflater = LayoutInflater.from(context); 
    
        mItems.add(new Item("Red",  R.drawable.red)); 
        mItems.add(new Item("Magenta", R.drawable.magenta)); 
        mItems.add(new Item("Dark Gray", R.drawable.dark_gray)); 
        mItems.add(new Item("Gray",  R.drawable.gray)); 
        mItems.add(new Item("Green",  R.drawable.green)); 
        mItems.add(new Item("Cyan",  R.drawable.cyan)); 
    } 
    
    @Override 
    public int getCount() { 
        return mItems.size(); 
    } 
    
    @Override 
    public Item getItem(int i) { 
        return mItems.get(i); 
    } 
    
    @Override 
    public long getItemId(int i) { 
        return mItems.get(i).drawableId; 
    } 
    
    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
        View v = view; 
        ImageView picture; 
        TextView name; 
    
        if (v == null) { 
         v = mInflater.inflate(R.layout.grid_item, viewGroup, false); 
         v.setTag(R.id.picture, v.findViewById(R.id.picture)); 
         v.setTag(R.id.text, v.findViewById(R.id.text)); 
        } 
    
        picture = (ImageView) v.getTag(R.id.picture); 
        name = (TextView) v.getTag(R.id.text); 
    
        Item item = getItem(i); 
    
        picture.setImageResource(item.drawableId); 
        name.setText(item.name); 
    
        return v; 
    } 
    
    private static class Item { 
        public final String name; 
        public final int drawableId; 
    
        Item(String name, int drawableId) { 
         this.name = name; 
         this.drawableId = drawableId; 
        } 
    } 
    

    }

    設定あなたのGridViewにそのアダプタ:

    @Override ます。public voidのonCreate(バンドルsavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); GridViewのgridView =(GridView)findViewById(R.id.gridview); gridView。setAdapter(new MyAdapter(this)); }

関連する問題