-
[안드로이드] GridView 사용법카테고리 없음 2024. 4. 3. 10:34
xml 사용법
android:numColumns를 설정하여 한 줄에 들어갈 요소들을 설정할 수 있습니다.
<!-- activity_my_page.xml --> <androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/white"> <GridView android:id="@+id/postingListView" android:layout_width="match_parent" android:layout_height="0dp" android:numColumns="3" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/baseLine" /> </androidx.constraintlayout.widget.ConstraintLayout>
왼쪽은 numColumns가 3일 때, 오른쪽은 6일 때
코드 작성 방법
이제 이미지들을 Grid에 뿌려주기 위해서 BaseAdapter라는걸 사용해야 합니다.
convertView가 ImageView가 아닐 때 ImageView를 새로 생성하고 이미지를 설정하여 넘겨줍니다.
여기서 adjustViewBounds를 볼 수 있는데
이 설정을 활성화하면 한 줄에 얼만큼 들어가냐에 따라 크기를 자동으로 조절합니다.
그리고 액티비티에서 GridView를 찾아 어댑터를 연결해주어야 합니다.어탭터를 잘 연결해주었다면 위처럼 보이게 될겁니다.
(adjustViewBounds를 비활성화한 사진은 아래)
data class Posting( val imageDrawableId: Int, val description: String ) class MyPagePostingAdapter( private val context: Context, private val postings: List<Posting> ) : BaseAdapter() { override fun getCount(): Int = postings.size override fun getItem(position: Int): Posting = postings[position] override fun getItemId(position: Int): Long = position.toLong() override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val imageView = convertView as? ImageView ?: ImageView(context).apply { adjustViewBounds = true setPadding(3) } val imageDrawableId = getItem(position).imageDrawableId imageView.setImageResource(imageDrawableId) return imageView } } class MyPageActivity : AppCompatActivity() { private val binding by lazy { ActivityMyPageBinding.inflate(layoutInflater) } private lateinit var user: User override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) user = intent.getSerializableExtra("User") as User setContentView(binding.root) postingListView.adapter = MyPagePostingAdapter(this, user.postings) } }
이미지가 자유 분방해졌다..기본적인 기능만 사용한다면 웬만하면 키는게 설정할 귀찮음도 덜 수 있을 것 같다.