ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] 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)
        }
    }

    이미지가 자유 분방해졌다..

    기본적인 기능만 사용한다면 웬만하면 키는게 설정할 귀찮음도 덜 수 있을 것 같다.

Designed by Tistory.