質問編集履歴

1 ソースコードの追加

n_kazuki

n_kazuki score 25

2016/01/18 15:06  投稿

GridViewに画像を設定すると余白が空いてしまう。
GridViewに表示される画像のサイズで困っています。
1. 問題点
---
- GridViewで使用する画像1のように空白が空いてしまう。
画像1を参照してください(クリックしている箇所は色が変わっています)
(空白の大きさは、画像2で表示している画像のサイズになっていると思われます。)
![](ed4b7da3ca6f6065b33e5889d6f42b87.png)画像1(空白が空いてしまっているLayout)
2. GridView作成の流れ
---
- 画像2のlayoutを、GridViewに渡して表示させています。
![](5ca12c1858f0c4348346d67e19d3e009.png)画像2(GridViewで表示させる画像)
3. 作成したいGridViewイメージ
---
- 画像3のような空白が存在しないGridViewを作成したいです。
![](c1cdd5ac6529aea83eed0d0754ed2bd1.png)画像2(作成したいLayoutイメージ)
インスタグラム風なUIを作りたいと思っています。
初心者の質問になりますが、ご存知の方がおりましたら、どうぞお教え下さい。
初心者の質問になりますが、ご存知の方がおりましたら、どうぞお教え下さい。
---
追記 - 20151018
- Activity_CommunicationSpace_MemberList
```java
public class Activity_CommunicationSpace_MemberList extends Activity {
   
   private List<Data_User> objects = new ArrayList<Data_User>();
   private Data_User item = new Data_User();
   private String user_name;
   private Bitmap user_icon;
   private Bitmap user_profile;
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_communicationspace_memberlist);
       user_name = "Test_Test";
       user_icon = BitmapFactory.decodeResource(getResources(), R.drawable.icon_lamborghini);
       for (int i = 0; i < 20; i++) {
           item = new Data_User();
           item.setNameData(user_name);
           item.setIconData(user_icon);
           objects.add(item);
       }
       Adapter_CommunicationSpace_MemberList adapter = new Adapter_CommunicationSpace_MemberList(getApplicationContext(), R.layout.adapter_communicationspace_memberlist, objects);
       ExpandableHeightGridView expandableHeightGridView = (ExpandableHeightGridView) findViewById(R.id.gridview_communicationspace_memberlist);
       expandableHeightGridView.setExpanded(true);
       expandableHeightGridView.setAdapter(adapter);
       final ScrollView scrollView = (ScrollView) findViewById(R.id.activity_communicationspace_memberlist_scrollView);
       scrollView.post(new Runnable() {
           public void run() {
               scrollView.fullScroll(ScrollView.FOCUS_UP);
           }
       });
   }
}
```
- Adapter_CommunicationSpace_MemberList
```java
public class Adapter_CommunicationSpace_MemberList extends ArrayAdapter<Data_User> {
   private LayoutInflater layoutInflater_;
   public Adapter_CommunicationSpace_MemberList(Context context, int textViewResourceId, List<Data_User> objects) {
       super(context, textViewResourceId, objects);
       layoutInflater_ = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   }
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       // 特定の行(position)のデータを得る
       Data_User item = (Data_User) getItem(position);
       // convertViewは使い回しされている可能性があるのでnullの時だけ新しく作る
       if (null == convertView) {
           convertView = layoutInflater_.inflate(R.layout.adapter_communicationspace_memberlist, null);
       }
       // Data_Adapter_ListViewのデータをViewの各Widgetにセットする
       TextView textView;
       textView = (TextView) convertView.findViewById(R.id.textview);
       textView.setText(item.getNameData());
       ImageView imageView;
       imageView = (ImageView) convertView.findViewById(R.id.imageview);
       imageView.setImageBitmap(item.getIconData());
       return convertView;
   }
}
```
- Data_User
```java
public class Data_User {
   private Bitmap iconData;
   private String profileData;
   private String nameData;
   public void setIconData(Bitmap icon) {
       iconData = icon;
   }
   public Bitmap getIconData() {
       return iconData;
   }
   public void setProfileData(String profile) {
       profileData = profile;
   }
   public String getProfileData() {
       return profileData;
   }
   public void setNameData(String nameData){
       this.nameData = nameData;
   }
   public String getNameData(){
       return this.nameData;
   }
}
```
- ExpandableHeightGridView
```java
/**
* ScrollView内でGridViewを使うためのクラス
*/
public class ExpandableHeightGridView extends GridView {
   boolean expanded = false;
   public ExpandableHeightGridView(Context context)
   {
       super(context);
   }
   public ExpandableHeightGridView(Context context, AttributeSet attrs)
   {
       super(context, attrs);
   }
   public ExpandableHeightGridView(Context context, AttributeSet attrs, int defStyle)
   {
       super(context, attrs, defStyle);
   }
   public boolean isExpanded()
   {
       return expanded;
   }
   @Override
   public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
   {
       // HACK! TAKE THAT ANDROID!
       if (isExpanded())
       {
           // Calculate entire height by providing a very large height hint.
           // View.MEASURED_SIZE_MASK represents the largest height possible.
           int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST);
           super.onMeasure(widthMeasureSpec, expandSpec);
           ViewGroup.LayoutParams params = getLayoutParams();
           params.height = getMeasuredHeight();
       }
       else
       {
           super.onMeasure(widthMeasureSpec, heightMeasureSpec);
       }
   }
   public void setExpanded(boolean expanded)
   {
       this.expanded = expanded;
   }
}
```
- activity_communicationspace_memberlist
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/relativelayout1"
   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"
   android:layout_marginTop="10dp"
   android:layout_marginBottom="5dp"
   android:layout_marginRight="10dp"
   android:layout_marginLeft="10dp"
   android:orientation="vertical"
   tools:context="packagename.Activity_CommunicationSpace_MemberList" >
   <ScrollView android:id="@+id/activity_communicationspace_memberlist_scrollView"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="vertical" >
           <LinearLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:orientation="vertical"
               android:background="#FFFFFF" >
               <TextViewなどのwidget
                   .
                   .
                   .
                   .
           </LinearLayout>
           <LinearLayout
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:orientation="vertical"
               android:paddingTop="3dp" >
               <packagename.ExpandableHeightGridView android:id="@+id/gridview_communicationspace_memberlist"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:numColumns="4"/>
                   <!--android:gravity="center"-->
                   <!--android:minHeight="100dp"-->
                   <!--android:stretchMode="columnWidth"-->
           </LinearLayout>
       </LinearLayout>
   </ScrollView>
</RelativeLayout>
```
- adapter_communicationspace_memberlist
```xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content">
   <ImageView android:id="@+id/imageview"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/icon_lamborghini"/>
   <TextView android:id="@+id/textview"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="test"/>
</FrameLayout>
```
  • Java

    20664 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • XML

    984 questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

  • Android

    9012 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    5605 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る