片段在活动上重叠:Android Studio

片段在活动上重叠:Android Studio,android,xml,android-studio,kotlin,overlapping,Android,Xml,Android Studio,Kotlin,Overlapping,只要我单击活动上的按钮调用片段,以使其用新片段替换活动,它就不会用片段替换活动,而是片段的内容在活动上重叠 以下是活动的kotlin文件: package com.sahil.randoms import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_game_start.* class ActivityGameSt

只要我单击活动上的按钮调用片段,以使其用新片段替换活动,它就不会用片段替换活动,而是片段的内容在活动上重叠

以下是活动的kotlin文件:

package com.sahil.randoms
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_game_start.*

class ActivityGameStart : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_game_start)


        title="Start"

        btnStart.setOnClickListener(){

            frameStart.removeAllViews()

            val fragmentManager= supportFragmentManager
            val transaction=fragmentManager.beginTransaction()
            transaction.replace(R.id.frameStart,FragmentPlayArea()).commit()

        }

    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="#ffffff"
    tools:context=".ActivityGameStart"
    android:id="@+id/rlStart">

    <TextView
        android:id="@+id/txtHighScore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HIGH SCORE"
        android:textColor="#000000"
        android:textSize="18sp"
        android:padding="10dp"
        android:background="@drawable/background"
        android:layout_margin="15dp"
        />
    <FrameLayout
        android:id="@+id/frameStart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <TextView
        android:id="@+id/txtStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Press the Start and Start the Timer"
        android:layout_below="@id/txtHighScore"
        android:layout_marginTop="50dp"
        android:layout_marginHorizontal="50dp"
        android:layout_centerHorizontal="true"
        android:textSize="25sp"
        android:textStyle="bold"
        android:textColor="#8f0077"
        />

    <Button
        android:id="@+id/btnStart"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtStart"
        android:layout_centerHorizontal="true"
        android:text="Start"
        android:textStyle="bold"
        android:layout_marginTop="80dp"
        android:textSize="20sp"
        android:background="@drawable/button"/>


</RelativeLayout>
活动的xml文件:

package com.sahil.randoms
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_game_start.*

class ActivityGameStart : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_game_start)


        title="Start"

        btnStart.setOnClickListener(){

            frameStart.removeAllViews()

            val fragmentManager= supportFragmentManager
            val transaction=fragmentManager.beginTransaction()
            transaction.replace(R.id.frameStart,FragmentPlayArea()).commit()

        }

    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="#ffffff"
    tools:context=".ActivityGameStart"
    android:id="@+id/rlStart">

    <TextView
        android:id="@+id/txtHighScore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HIGH SCORE"
        android:textColor="#000000"
        android:textSize="18sp"
        android:padding="10dp"
        android:background="@drawable/background"
        android:layout_margin="15dp"
        />
    <FrameLayout
        android:id="@+id/frameStart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <TextView
        android:id="@+id/txtStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Press the Start and Start the Timer"
        android:layout_below="@id/txtHighScore"
        android:layout_marginTop="50dp"
        android:layout_marginHorizontal="50dp"
        android:layout_centerHorizontal="true"
        android:textSize="25sp"
        android:textStyle="bold"
        android:textColor="#8f0077"
        />

    <Button
        android:id="@+id/btnStart"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtStart"
        android:layout_centerHorizontal="true"
        android:text="Start"
        android:textStyle="bold"
        android:layout_marginTop="80dp"
        android:textSize="20sp"
        android:background="@drawable/button"/>


</RelativeLayout>
片段的xml文件:

package com.sahil.randoms

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

class FragmentPlayArea : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ):View? {

        val view = inflater.inflate(R.layout.fragment_play_area, container, false)

        return view
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".FragmentPlayArea">
    <TextView
        android:id="@+id/txtHighScore1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HIGH SCORE"
        android:textColor="#000000"
        android:textSize="18sp"
        android:padding="10dp"
        android:background="@drawable/background"
        android:layout_margin="15dp"
        />
    <ImageView
        android:id="@+id/imgTimer"
        android:layout_width="40dp"
        android:layout_height="40dp"
        app:srcCompat="@drawable/ic_time"
        android:layout_toRightOf="@id/txtHighScore1"
        android:layout_marginLeft="140dp"
        android:layout_marginTop="20dp"/>
    <TextView
        android:id="@+id/txtTimer"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_toRightOf="@id/imgTimer"
        android:layout_marginTop="18dp"
        android:textColor="#8f0077"
        android:textSize="30sp"
        />
    <TextView
        android:id="@+id/txtGuess"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Guess the following Random Word!"
        android:layout_below="@id/txtHighScore1"
        android:layout_marginTop="50dp"
        android:layout_marginHorizontal="20dp"
        android:layout_centerHorizontal="true"
        android:textSize="25sp"
        android:textStyle="bold"
        android:textColor="#8f0077"
        />

    <TextView
        android:id="@+id/txtRandomWord"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:text="ABCDE"
        android:layout_below="@id/txtGuess"
        android:layout_marginTop="50dp"
        android:textAlignment="center"
        android:layout_centerHorizontal="true"
        android:background="@drawable/background"
        android:paddingVertical="10dp"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textColor="#000000"
        />

    <EditText
        android:id="@+id/etResponse"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/txtRandomWord"
        android:maxLines="1"
        android:inputType="text"
        android:background="@drawable/background"
        android:layout_marginHorizontal="40dp"
        android:hint="Enter Here"
        android:textAlignment="center"
        android:layout_marginTop="40dp"
        />

    <TextView
        android:id="@+id/txtAnswer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtRandomWord"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:textSize="25sp"
        android:textColor="#8f0077"
        android:textStyle="bold"
        android:text="The Correct Word is ABCDE"
        />
    <Button
        android:id="@+id/btnCheck"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/etResponse"
        android:layout_centerHorizontal="true"
        android:text="CHECK"
        android:textStyle="bold"
        android:layout_marginTop="20dp"
        android:textSize="20sp"
        android:background="@drawable/button"/>
    <Button
        android:id="@+id/btnNext"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/etResponse"
        android:layout_centerHorizontal="true"
        android:text="NEXT"
        android:textStyle="bold"
        android:layout_marginTop="20dp"
        android:textSize="20sp"
        android:background="@drawable/button"/>
</RelativeLayout>


请帮助我解决这个问题,因为我暂时无法解决这个问题:(

您有一个活动布局,其中所有文本和按钮都排列在不同的位置,然后是一个填充整个视图的
框架布局(
匹配父视图的高度和宽度)。如果您在框架布局中添加了一些内容,那么您将拥有所有文本和按钮,以及刚刚添加的新内容

如果要执行此操作,并且
FrameLayout
中的新内容旨在隐藏其他内容,则需要执行以下几项操作:

  • FrameLayout
    位于其他视图的下方(查看“开始”按钮如何仍然位于顶部)-您需要将其作为最后添加到XML文件的内容,因此它位于所有其他内容的顶部。或者可以给它一个
    elevation
    值(不确定该值是否适用于
    RelativeLayout
    s,但它可能确实适用)
  • 您的片段布局需要一个不透明的
    background
    值,否则您将通过它看到旧内容

正如@Tenfour04所说,通常的方法是使用一个包含内容容器的活动布局(如
FrameLayout
)然后你交换用户界面的输入和输出-这样你就可以从一个包含分数和开始按钮的片段开始,当你点击按钮时,它会删除该片段并添加
FragmentPlayArea
one。这样,它后面就没有什么可看的了!而且它与可访问性服务一起工作也会更好(它们有时会被卡在屏幕上)“隐藏”用户界面),如果您只是将其覆盖,它仍然存在

您能提供一个屏幕截图吗?我现在添加了查看它。您正在将您的片段放置在FrameLayout(
frameStart
)中这是活动布局的一个组件。因此,不会有任何操作会从活动布局中删除其他视图。片段不会替换活动。片段是由活动的视图层次结构中的活动承载的视图组件。如果要替换活动的所有内容,应你的活动的顶层是FrameLayout,并将片段放在那里。但是对于你想要交换的内容,使用单独的片段更有意义。你的意思是我使用了相对布局,所以我应该使用FrameLayout来代替它吗?现在我已经用FrameLayout容器制作了一个活动,但我无法解决重叠问题将framelayout的特定容器与另一个片段绑定。例如,在同一活动的新容器上,所有包含视图的UI等。您可以使用片段事务将片段放入容器中:您的第一个UI片段在其中,当您要显示下一个屏幕时,将第一个片段替换为第二个片段。搜索对于“主/详细视图”或“单一活动应用程序”,请查看更多示例。请确保您没有通过XML包含第一个片段,如果您只是在代码中添加和删除所有片段,则会更容易