안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
만들고자 하는 것은 다음과 같은 것입니다.
앨범Title(TextView) 보기(Button)
사진들(GridView)
앨범Title(TextView) 보기(Button)
사진들(GridView)
앨범Title(TextView) 보기(Button)
사진들(GridView)
...
버튼을 누르면 GridView가 보였다 안보였다 하는 거죠.
위와 같은 custom View를 만들어서 여러개를 스크롤 뷰에 위치시켜서
스크롤 될수 있도록하고자 합니다.
(즉, gridview가 스크롤이 되는건 아니고 전체화면이 스크롤이 되는 방식입니다.)
그래서
앨범Title(TextView) 보기(Button)
사진들(GridView)
를 하나의 View로 만들기 위해서 XML 을 작성을 하고,
클래스 파일을 다음과 같이 작성을 했습니다.
main.xml은 다음과 같습니다.
그런데 몇가지 문제가 있는데 우선 가장 큰 문제는 이미지가 나오질 안네요.
ImageAdapter의 getView는 호출이 되는데, 이미지가 나오지 않습니다.
이미지가 안나오는 이유를 도저히 모르겠습니다.
조언좀 부탁드리겠습니다.
만들고자 하는 것은 다음과 같은 것입니다.
앨범Title(TextView) 보기(Button)
사진들(GridView)
앨범Title(TextView) 보기(Button)
사진들(GridView)
앨범Title(TextView) 보기(Button)
사진들(GridView)
...
버튼을 누르면 GridView가 보였다 안보였다 하는 거죠.
위와 같은 custom View를 만들어서 여러개를 스크롤 뷰에 위치시켜서
스크롤 될수 있도록하고자 합니다.
(즉, gridview가 스크롤이 되는건 아니고 전체화면이 스크롤이 되는 방식입니다.)
그래서
앨범Title(TextView) 보기(Button)
사진들(GridView)
를 하나의 View로 만들기 위해서 XML 을 작성을 하고,
Custom View XML
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <TextView android:id="@+id/gridtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="==Title==" /> <Button android:id="@+id/gridextend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-" /> </LinearLayout> <GridView android:id="@+id/griditem" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:verticalSpacing="10dp" android:numColumns="auto_fit" android:columnWidth="60dp" android:stretchMode="columnWidth" android:scrollbars="none" android:gravity="center" /> </LinearLayout>
클래스 파일을 다음과 같이 작성을 했습니다.
Custom View Java파일
package com.android.GridTest; import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.TextView; public class TitleGridView extends LinearLayout{ TextView mTitle = null; Button mExtendBtn = null; GridView mItemGrid = null; Context mContext = null; public TitleGridView(Context context, AttributeSet attrs) { super(context, attrs); initTitleGridView(context); } public TitleGridView(Context context) { super(context); initTitleGridView(context); } void initTitleGridView(Context context) { mContext = context; String infService = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater li = (LayoutInflater) getContext().getSystemService(infService); View v = li.inflate(R.layout.titlegridview, this, false); addView(v); mTitle = (TextView) findViewById(R.id.gridtitle); mExtendBtn = (Button) findViewById(R.id.gridextend); mItemGrid = (GridView) findViewById(R.id.griditem); setAdapter(new ImageAdapter(mContext)); setFocusable(true); setFocusableInTouchMode(true); setBackgroundColor(Color.BLUE); mExtendBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(mExtendBtn.getText().toString().trim().equals("-")) { mExtendBtn.setText("+"); mItemGrid.setVisibility(View.GONE); } else { mExtendBtn.setText("-"); mItemGrid.setVisibility(View.VISIBLE); } } }); } public void setAdapter(ListAdapter adapter) { mItemGrid.setAdapter(adapter); } public class ImageAdapter extends BaseAdapter { public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(45, 45)); imageView.setAdjustViewBounds(false); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); imageView.setBackgroundColor(Color.BLUE); } else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } private Context mContext; private Integer[] mThumbIds = { R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, //1 R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, R.drawable.sample_thumb_7, //2 R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, //3 R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, R.drawable.sample_thumb_7, //4 R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, //5 R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, R.drawable.sample_thumb_7, //6 R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, //7 R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, R.drawable.sample_thumb_7, //8 R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, R.drawable.sample_thumb_3, //9 R.drawable.sample_thumb_4, R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, R.drawable.sample_thumb_7, //10 }; } }
main.xml은 다음과 같습니다.
main.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myScroll" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbarStyle="outsideInset" android:verticalSpacing="10dip" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.android.GridTest.TitleGridView android:id="@+id/Grid1" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <com.android.GridTest.TitleGridView android:id="@+id/Grid2" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </ScrollView>
그런데 몇가지 문제가 있는데 우선 가장 큰 문제는 이미지가 나오질 안네요.
ImageAdapter의 getView는 호출이 되는데, 이미지가 나오지 않습니다.
이미지가 안나오는 이유를 도저히 모르겠습니다.
조언좀 부탁드리겠습니다.
2009.09.19 15:13:33
답변 감사드립니다.
src이미지의 size를 확인해보라는 것이 gridview에 들어갈 이미지들의
size를 확인해보라는 의미인가요?
해당 이미지들은 API Demo에 있는 이미지들입니다.
위와 같이 customView가 아닌 그냥 GridView로만 테스트 했을 때는 정상적으로 나옵니다.
도대체 왜 안나올까요 ㅜㅜ
src이미지의 size를 확인해보라는 것이 gridview에 들어갈 이미지들의
size를 확인해보라는 의미인가요?
해당 이미지들은 API Demo에 있는 이미지들입니다.
위와 같이 customView가 아닌 그냥 GridView로만 테스트 했을 때는 정상적으로 나옵니다.
도대체 왜 안나올까요 ㅜㅜ
2009.09.21 09:10:51
Custom View XML에서 android:layout_height를 fill_parent에서 wrap_content로 변경을 하니
일단 이미지는 나오네요.(다른곳에서 어떤 고마운 님이 알려주셨습니다.)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
(아주 작은 사이즈 부터 추천해드립니다.)