如何使用 BottomNavigationView 在两个应用程序屏幕之间切换
How to use BottomNavigationView to switch between two app screens
问题是:
我创建了一个应用程序,其中一个屏幕包含 ViewPager(包含卡片)和 BottomNavigationView。但现在我需要添加功能以切换到 "about" 屏幕。
问题:
如何切换到 "about" 布局和返回最佳方式? "about" 只是简单的布局,只有几个 textView(不需要屏幕之间的数据传输)
我已经尝试重写我的 classes 并创建顶级层次结构 Main class 它将包含另一个 ViewPager,该 ViewPager 将包含片段(带有卡片的 Viewpager 和 "about" 布局) 并在它们之间切换,但目前它并没有真正起作用,也许有一种更简单的方法可以在 "home" 的顶部显示 "about",然后再返回?
我的 NavigationItemSelectedListener 在 MainActivity 中:
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
// change screen
return true;
case R.id.navigation_about:
// change screen
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// other code here ...
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
// other code here ...
}
使用 FrameLayout
而不是 ViewPager
。然后创建两个片段。一个片段带有 ViewPager
,另一个片段用于“关于”视图。在 BottomNavigationView
上单击只需替换合适的片段。
希望对您有所帮助。 :)
找到一种可行的方法:
在 main_layout 我创建了 constraintLayout:
<android.support.constraint.ConstraintLayout
android:id="@+id/aboutLayer"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple" <--- BACKGROUND NOT TRANSPARENT
android:visibility="invisible" <--- INVISIBLE
app:layout_constraintBottom_toTopOf="@+id/navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</android.support.constraint.ConstraintLayout>
并且在侦听器中只需更改层的可见性
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
// hide about
aboutInfo.setVisibility(View.INVISIBLE);
return true;
case R.id.navigation_about:
// show about
aboutInfo.setVisibility(View.VISIBLE);
return true;
}
return false;
}
看起来像:
问题是: 我创建了一个应用程序,其中一个屏幕包含 ViewPager(包含卡片)和 BottomNavigationView。但现在我需要添加功能以切换到 "about" 屏幕。
问题: 如何切换到 "about" 布局和返回最佳方式? "about" 只是简单的布局,只有几个 textView(不需要屏幕之间的数据传输)
我已经尝试重写我的 classes 并创建顶级层次结构 Main class 它将包含另一个 ViewPager,该 ViewPager 将包含片段(带有卡片的 Viewpager 和 "about" 布局) 并在它们之间切换,但目前它并没有真正起作用,也许有一种更简单的方法可以在 "home" 的顶部显示 "about",然后再返回?
我的 NavigationItemSelectedListener 在 MainActivity 中:
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
// change screen
return true;
case R.id.navigation_about:
// change screen
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// other code here ...
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
// other code here ...
}
使用 FrameLayout
而不是 ViewPager
。然后创建两个片段。一个片段带有 ViewPager
,另一个片段用于“关于”视图。在 BottomNavigationView
上单击只需替换合适的片段。
希望对您有所帮助。 :)
找到一种可行的方法:
在 main_layout 我创建了 constraintLayout:
<android.support.constraint.ConstraintLayout
android:id="@+id/aboutLayer"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple" <--- BACKGROUND NOT TRANSPARENT
android:visibility="invisible" <--- INVISIBLE
app:layout_constraintBottom_toTopOf="@+id/navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</android.support.constraint.ConstraintLayout>
并且在侦听器中只需更改层的可见性
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
// hide about
aboutInfo.setVisibility(View.INVISIBLE);
return true;
case R.id.navigation_about:
// show about
aboutInfo.setVisibility(View.VISIBLE);
return true;
}
return false;
}
看起来像: