两个Activity之间切换时UI部分重叠

发布于:2024-07-04 ⋅ 阅读:(137) ⋅ 点赞:(0)

书籍

《第一行代码 Android》第三版

开发 环境

Android Studio Jellyfish | 2023.3.1

setContentView

android studio自动生成的SecondActivity.kt中自动生成的代码中已经绑定了second_layout.xml的布局资源,通过代码:setContentView(R.layout.second_layout)实现。代码如下:

package com.example.activitytest

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.second_layout)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }
}

setContentView就是设置一个Activity的显示界面,使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。

setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。

增加按钮控件button2

在android studio自动生成的second_layout.xml中添加一个按钮Button2,如下所示:

<Button
	android:id="@+id/button2"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:text="Button 2"
	tools:ignore="MissingConstraints" />

最后一句代码tools:ignore="MissingConstraints"的说明可以参考前面的文章button1 <Button>: Missing Constraints in ConstraintLayout-CSDN博客

UI界面切换

要实现在FirstActivity的界面(first_layout.xml)点击一下按钮button1切换到SecondActivity的界面(second_layout.xml界面显示button2按钮控件),那么就需要在button1的按钮点击事件监听中实现界面的切换动作,代码如下:

mainBinding.button1.setOnClickListener {
    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)
}

这里使用了Intent这个知识,书中有比较详细的讲解,此处不冗余介绍。

private lateinit var mainBinding: FirstLayoutBinding

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

        mainBinding = FirstLayoutBinding.inflate(layoutInflater)
        setContentView(mainBinding.root)
        mainBinding.button1.setOnClickListener {
            val intent = Intent(this, SecondActivity::class.java)
            startActivity(intent)
        }

    }

问题

在学习3.3 使用Intent在Activity之间穿梭章节的时候,新建了SecondActivity及其对应的布局资源second_layout.xml,并实现从FirstActivity到SecondActivity的切换,我遇到的问题是切换到SecondActivity后,界面的标题和BUTTON 2重叠了.如下图所示:

而书本中的并没有出现这样的情况.

解决方式

经过胡乱测试,发现将SecondActivity.kt中的enableEdgeToEdge()注释后,该问题就解决了。

效果如下所示:


网站公告

今日签到

点亮在社区的每一天
去签到