片段在活动上重叠:Android Studio
只要我单击活动上的按钮调用片段,以使其用新片段替换活动,它就不会用片段替换活动,而是片段的内容在活动上重叠 以下是活动的kotlin文件:片段在活动上重叠: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
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包含第一个片段,如果您只是在代码中添加和删除所有片段,则会更容易