Sobes.tech
Middle

როგორ შევცვალოთ RecyclerView-ის სვეტების რაოდენობა ისე, რომ პორტრეტის მიმართულებით ერთი სვეტი იყოს, ხოლო ლანდშაფტის მიმართულებით ორი ან მეტი სვეტი?

sobes.tech AI

პასუხი AI-სგან

შეგიძლიათ გამოიყენოთ GridLayoutManager.

კოლონების რაოდენობის ცვლილებისთვის ეკრანის მიმართულების მიხედვით, უნდა:

  1. მიიღოთ მიმდინარე მოწყობილობის მიმართულება.
  2. მიმართულების მიხედვით, შექმნათ GridLayoutManager საჭირო რაოდენობის კოლონებით და დაამაგროთ იგი RecyclerView-ზე.

მაგალითი:

// აქტივობაში ან ფრაგმენტში, სადაც გამოიყენება RecyclerView
override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    updateColumnCount(newConfig.orientation)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // ... RecyclerView-ის ინიციალიზაცია ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // ერთი სვეტი პორტრეტის რეჟიმში
    } else {
        2 // ორი სვეტი ლანდშაფტის რეჟიმში
        // შეიძლება გამოიყენოთ სხვა მნიშვნელობა, მაგალითად 3, 4 და ა.შ.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

ასევე შესაძლებელია განსაზღვროთ კოლონების რაოდენობა რესურსებში (dimens.xml) სხვადასხვა მიმართულებისთვის:

შექმენით res/values/dimens.xml:

<resources>
    <integer name="grid_span_count">1</integer>
</resources>

შექმენით res/values-land ან res/values-sw600dp-land (პლანშეტებისთვის) dimens.xml:

<resources>
    <integer name="grid_span_count">2</integer>
</resources>

და შემდეგ გამოიყენეთ ეს რესურსი კოდში:

recyclerView.layoutManager = GridLayoutManager(this, resources.getInteger(R.integer.grid_span_count))

ეს მიდგომა უფრო მოქნილია, რადგან ადვილად შეიძლება შეცვალოთ კოლონების რაოდენობა, კოდის შეცვლის გარეშე.