在片段之间切换时,底部导航栏向下推 [英] Bottom Navigation Bar pushes down when changing between fragments
问题描述
在我的活动中,我有一个底部导航栏,并且框架布局可以显示片段,但一切正常,但是问题是当我按顺序从1-4开始移动时,底部导航栏保持在原位,但是当我突然跳下时从4到2,则底部导航栏不显示在屏幕上,当再次单击同一项目时,它将回到正常位置。
In my activity i have a bottom navigation bar and the frame layout to show the fragments everything works fine but the problem is when i start moving from 1 - 4 in sequence the bottom navigation bar stays in its position but when i jump suddenly from 4 to 2 then the bottom navigation bar goes out of screen and when again clicked on the same item then it comes to normal position.
该视频显然可以帮助您了解我的问题是单击观看。
This video will clearly help you get what my problem is Click to watch.
因为我认为这在考虑UI时是一个主要问题,所以请帮助我如何实现这一目标。为了简化工作,我发布了包含这些元素的代码。
as i guess this is a major problem when considering the UI so kindly help me how can i achieve this. For making things easier i'm posting my codes which contain these elements.
activity_appMain.xml
activity_appMain.xml
<?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=".AppFragments.AppMain">
<FrameLayout
android:id="@+id/fragments_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/navigation_bar"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigation_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_navigation" />
</RelativeLayout>
AppMain.java
AppMain.java
package com.coderedinnovations.allioservices.AppFragments;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MenuItem;
import android.view.WindowManager;
import com.coderedinnovations.allioservices.AppFragments.FeedbackFragment;
import com.coderedinnovations.allioservices.AppFragments.HomeFragment;
import com.coderedinnovations.allioservices.AppFragments.MyOrdersFragment;
import com.coderedinnovations.allioservices.AppFragments.MyProfileFragment;
import com.coderedinnovations.allioservices.R;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.iid.FirebaseInstanceId;
public class AppMain extends AppCompatActivity {
public void adjustFontScale(Configuration configuration){
configuration.fontScale = (float) 0.9;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_main);
adjustFontScale(getResources().getConfiguration());
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
BottomNavigationView bottomNavigationView = findViewById(R.id.navigation_bar);
bottomNavigationView.setOnNavigationItemSelectedListener(navigationItemSelectedListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragments_container, new HomeFragment()).commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = null;
switch (menuItem.getItemId()){
case R.id.nav_home:
selectedFragment = new HomeFragment();
break;
case R.id.nav_orders:
selectedFragment = new MyOrdersFragment();
break;
case R.id.nav_feedback:
selectedFragment = new FeedbackFragment();
break;
case R.id.nav_profile:
selectedFragment = new MyProfileFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragments_container,selectedFragment).commit();
return true;
}
};
}
我在寻找类似的问题,但没有一个得到回答
I looked for a similar question like this but none of them have been answered
编辑:问题仅在我从后往前按下时出现,但是当我从1-4转到时不会出现问题,但是当我从4突然单击到
Issue only appears when i press from back to front but when i'm going from 1-4 the issue doesn't arise but when i click suddenly from 4 to any other tab the bar gets pushed down.
推荐答案
我遇到了同样的问题。这主要是因为在内屏中使用了coordinatorlayout。任何具有coordinatorlayout的屏幕都会使底部导航(放置在顶部)从其位置移动。
I was facing the same problem. This was mainly because of using coordinatorlayout in the inner screens. Any screen having coordinatorlayout makes the bottom navigation (placed on top) move from its location.
这篇关于在片段之间切换时,底部导航栏向下推的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!