Android 15, Edge-to-Edge, CoordinatorLayout & Tabs -> Symbolleiste über der StatusleisteAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Android 15, Edge-to-Edge, CoordinatorLayout & Tabs -> Symbolleiste über der Statusleiste

Post by Anonymous »

In meiner App habe ich eine Aktivität, die ein CoordinatorLayout zeigt, wobei ViewPager2 drei Registerkarten anzeigt, von denen jede eine RecyclerView hat. Beim Scrollen nach oben geht die obere MaterialToolBar unter die (undurchsichtige) Statusleiste und die Titel meiner Registerkarten bewegen sich nicht mehr, wenn sie mit ihrer Oberseite die untere Statusleiste berühren.
Die App wurde auf Android 16 aktualisiert, und jetzt wird das AppBarLayout über der Statusleiste angezeigt.
Hier ist ein Beispielcode:
Aktivität:

Code: Select all

class MyAdapter(private val items: List) : RecyclerView.Adapter() {

class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(android.R.id.text1)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
// Using a simple built-in Android layout for the demo
val view = LayoutInflater.from(parent.context)
.inflate(android.R.layout.simple_list_item_1, parent, false)
return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = items[position]
// Setting a minimum height to ensure the list is long enough to scroll
holder.itemView.minimumHeight = 200
}

override fun getItemCount() = items.size
}

class TabListFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val recyclerView = inflater.inflate(R.layout.activity_test_fragment, container, false) as RecyclerView

// Setup Dummy Data
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = MyAdapter((1..50).map { "Item $it" })

// 5.  Handle Bottom Insets for the List
// Ensures the last item in the list is fully visible above the nav bar
ViewCompat.setOnApplyWindowInsetsListener(recyclerView) { v, insets ->
val navBars = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
v.updatePadding(bottom = navBars.bottom + 100) // 100px extra for FAB clearance
insets
}

return recyclerView
}
}

class TestActivity : AppCompatActivity() {

private lateinit var ui: ActivityTestBinding

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

WindowCompat.setDecorFitsSystemWindows(window, false)
ui = ActivityTestBinding.inflate(layoutInflater)
setContentView(ui.root)

// Set action bar:
setSupportActionBar(ui.toolBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)

// Setup ViewPager and Tabs
ui.viewPager.adapter = object : FragmentStateAdapter(this) {
override fun getItemCount(): Int = 3
override fun createFragment(position: Int) = TabListFragment()
}

TabLayoutMediator(ui.tabLayout, ui.viewPager) { tab, position ->
tab.text = "TAB ${position + 1}"
}.attach()
}
}
Aktivitäts-XML:

Code: Select all

















Tab-XML:

Code: Select all


Und hier ist das Ergebnis beim Scrollen:
Image

Wie bringt man „liftOnScroll“ zum Laufen, sodass AppBarLayout wie zuvor unter der Statusleiste angezeigt wird?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post