这是我在此处发布的第一个问题,因此,如果我有任何遗漏,请给我机会更新我的问题!
因此,我是一位(相对)经验丰富的敏捷应用程序开发人员,在App Store上拥有多个应用程序。
目前,我正在努力将这些应用移至Google Play商店中,并且很难让任何事情都像迅速一样顺利地进行。我决定从一个空白应用程序重新启动我的整个第一个项目,并在此过程中提出问题以进行构建。
我的应用程序正在使用一个Main Activity来控制由bottomBar导航项控制的4-5个片段。我想限制片段的视图空间,以便于:
fragment_view_top =标题栏底部
fragment_view_bottom = bottomBar_navigation_top
这样一来,顶部和底部就不会隐藏任何东西。
我尝试了几种不同的布局约束选项,但没有任何工作正常。甚至可以在片段中添加一个空的底部导航栏,这样我就可以限制在其顶部,但它仍然无法正常工作!
任何帮助将不胜感激,谢谢!
fragment.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_home">
<android.support.v7.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/newsImage"
app:layout_constraintBottom_toTopOf="@id/navigation"/>
</android.support.constraint.ConstraintLayout>
这是我的main_activity.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
android:id="@+id/container">
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:layout_gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
</FrameLayout>
编辑09.20.2018:
这是我在主要活动中实现片段之间切换的方式
MainActivity.kt代码:
class HomeActivity : AppCompatActivity(){
lateinit var toolbar: ActionBar
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
toolbar.title = "Home"
val homeFragment = HomeFragment.newInstance()
openFragment(homeFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_map -> {
toolbar.title = "Map"
val localFragment = LocalFragment.newInstance()
openFragment(localFragment)
return@OnNavigationItemSelectedListener true
}
}
false
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
toolbar = supportActionBar!!
val bottomNavigation: BottomNavigationView = findViewById(R.id.navigation)
bottomNavigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
bottomNavigation.selectedItemId = R.id.navigation_home
private fun openFragment(fragment: Fragment) {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.container, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
}
答案 0 :(得分:0)
问题是:您正在用容器替换片段。将FrameLayout
放在main_activity.xml
中,并替换其中的片段。喜欢,
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent">
<FrameLayout
android:id="@+id/frmFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/navigation"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:layout_gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
</android.support.constraint.ConstraintLayout>
然后更改您的openFragment代码,例如
private fun openFragment(fragment: Fragment) {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.frmFragment, fragment)
transaction.addToBackStack(null)
transaction.commit()
}