2016-04-24 8 views
0

私はAndroidアプリケーションを開発しています。このアプリケーションを別のデバイスにインストールする必要があります。このため、レイアウトが完全に応答する必要があります。グリッドビューをフルに応答させる方法

私の活動の1つは、2列のグリッド表示で構成され、各列は「正方形」(画像)で構成されています。

問題は、私がすべてのデバイス(小規模、正常、大規模など)の再生を適応できないということです。

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

     gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       Intent i = new Intent(); 

       switch (position) { 

        case 0: 
         i.setClass(getApplicationContext(), Bacheca.class); 
         startActivity(i); 
         break; 

        case 1: 
         i.setClass(getApplicationContext(), Turni.class); 
         startActivity(i); 
         break; 

        case 2: 
         i.setClass(getApplicationContext(), Utility.class); 
         startActivity(i); 
         break; 

        case 3: 
         i.setClass(getApplicationContext(), Contatti.class); 
         startActivity(i); 
         break; 

        case 4: 
         i.setClass(getApplicationContext(), ScriviBacheca.class); 
         i.putExtra("user_id", id_user); 
         i.putExtra("nome", cognome); 
         i.putExtra("cognome", nome); 
         startActivity(i); 
         break; 

        case 5: 
         i.setClass(getApplicationContext(), Info.class); 
         i.putExtra("user_id", id_user); 
         startActivity(i); 
         break; 
       } 
      } 
     }); 
    }else{ 
     connectivityMessage("Nessuna connessione presente, assicurati di avere il traffico dati oppure il Wi-Fi attivato e riprova."); 
    } 
} 



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) { 
      imageView = new ImageView(mContext); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(2, 2, 2, 2); 

      int screenLayout = getApplicationContext().getResources().getConfiguration().screenLayout; 
      screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK; 

      switch (screenLayout) { 
       case Configuration.SCREENLAYOUT_SIZE_SMALL: 
        imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
        break; 

       case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
        imageView.setLayoutParams(new GridView.LayoutParams(330, 330)); 

        break; 

       case Configuration.SCREENLAYOUT_SIZE_LARGE: 
        imageView.setLayoutParams(new GridView.LayoutParams(280, 280)); 

        break; 

       case Configuration.SCREENLAYOUT_SIZE_XLARGE: 
        imageView.setLayoutParams(new GridView.LayoutParams(300, 300)); 
        break; 

       default: 
        imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
        break; 
      } 




     } 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 
    }; 
} 

これはレイアウトです:

<?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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="am.pacrocebianca.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="match_parent" 
     android:columnWidth="90dp" 
     android:numColumns="2" 
     android:verticalSpacing="5dp" 
     android:horizontalSpacing="5dp" 
     android:stretchMode="columnWidth" 
     android:gravity="center" 
     /> 
</RelativeLayout> 

このソリューションは、通常、大規模デバイス用に動作しますが、レイアウトは、通常のレイアウトと同じであるので、小型のデバイスでは動作しません。

これは私が私のアプリをデバッグするために使用するデバイスのリストです:

小型電話:ソニーのXperia U(3,5 '')

ノーマル電話:モトローラモトG 2014(5' ')

大:タブレットエイサーA1-713(7' ')

答えて

1

あなたはandroid:numColumns="2"あなたGridViewを埋めるために、できるだけ多くの列が表示されます
android:numColumns="auto_fit"に変更してください利用可能なスペース。

<GridView 
    ... 
    android:columnWidth="90dp" 
    android:numColumns="auto_fit" 
/> 
+0

私が「自分のイメージを自動的に調整したい」場合は、別の要望ですか? 私のコードでは、次のように指定しています。 imageView.setLayoutParams(new GridView.LayoutParams(100、100)); 正しいですか?私にとってはハードコードされており、これは良い選択ではありません –

+1

ハードコードしたくない場合。プログラムでスクリーンサイズを計算するだけです。画像の表示サイズは次のようになります:(screensize/numberOfColumn) –

関連する問題