我需要使用这两个元素,这就是我目前所拥有的:
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/colorAccent"
app:menu="@menu/menu_bottom" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我的问题是BottomNavigationView位于 前面NavigationView,但情况不应该如此(我说的是 y 索引)。我也尝试使用 aCoordinatorLayout代替,但随后卡BottomNavigationView在显示器的顶部。
我有一个底部导航视图,我正在使用 TapTargetView 库来指导用户如何使用某些功能。如果我通过底部导航视图,则 TapTargetView 将突出显示我不想要的整个底部栏。
我的问题是如何在底部导航视图中突出显示特定项目?
TapTargetView.showFor(this, TapTarget.forView(findViewById(R.id.home), "Home page", "We have cool features for you"),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
itemClicked();
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢。
我的底部导航栏在我的默认启动片段SearchFragment中不可见.如果我将开始片段更改为另一个例如MoreFragment,它会出现在其他所有内容上,除了SearchFragment,这是我理想的开始片段.
这是我的代码:
Main.java
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.MenuItem;
public class Main extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.activity_main, new SearchFragment()).commit();
}
BottomNavigationView bottomNavigation = (BottomNavigationView) findViewById(R.id.bottom_navigation);
bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()){
case R.id.seach_tab:
SearchFragment sf=new SearchFragment();
FragmentManager fragmentmanager1=getSupportFragmentManager();
fragmentmanager1.beginTransaction()
.replace(R.id.activity_main, sf)
.commit();
break;
case R.id.bookings_tab:
BookingsFragment bf=new BookingsFragment();
FragmentManager fragmentmanager2=getSupportFragmentManager();
fragmentmanager2.beginTransaction()
.replace(R.id.activity_main, bf)
.commit();
break;
case R.id.account_tab:
ProfileFragment …Run Code Online (Sandbox Code Playgroud) 我有一个底部导航视图,没有图标,只有文本字段。
我想垂直和水平居中文本并为不同的状态添加一个突出显示:
topnavigationview.setItemBackgroundResource(R.drawable.mainactivitybackgroundhighlight_top);
Run Code Online (Sandbox Code Playgroud)
使用 xml 代码:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/blau" android:state_pressed="true" />
<item android:drawable="@color/blau" android:state_checked="true" />
<item android:drawable="@color/dunkelgraublau" />
</selector>
Run Code Online (Sandbox Code Playgroud)
该视图包含如下:
<android.support.design.widget.BottomNavigationView
android:id="@+id/top_navigation_view"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_below="@id/include4"
android:background="@color/dunkelgraublau"
app:itemTextColor="@color/weiß"
app:menu="@menu/top_navigation_menu" />
Run Code Online (Sandbox Code Playgroud)
然而,它现在看起来像这样:
如您所见,突出显示并没有覆盖菜单的一半,更像是它的 40%;选择右手项目时相同 - 尽管宽度设置为match_parent。
文本也不是垂直居中,也不是水平居中;
1) 如何在布局中垂直居中菜单文本?
2) 如何让两个菜单项都占据导航视图的 50%?这将使文本水平居中并使突出显示按预期占据 50%。
我试图将所有图标居中,我已经使用以下代码禁用了移位模式:
/**
* This is done to remove the shift animation introduced by Android on the bottom navigation view
* /sf/answers/2918332301/
*/
@SuppressLint("RestrictedApi")
public static void disableShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
shiftingMode.setAccessible(true);
shiftingMode.setBoolean(menuView, false);
shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
item.setShiftingMode(false);
item.setPadding(0,15,0,0);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item.setChecked(item.getItemData().isChecked());
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Android 架构组件实现Nagivation。我能够在我的片段中成功导航。我试图将它附加到我的底部导航,但我无法正确使用它。我可以成功地在片段之间导航,Navigation.findNavController(View).navigate(R.id.Fragment)但是当我使用任何 UI 组件或后退按钮执行此操作时,底部导航中的突出显示不会更改,如下面的 gif 所示
我的代码如下MainActivity.kt,
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
navController.navigate(R.id.homeFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
navController.navigate(R.id.addEmotionFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
return@OnNavigationItemSelectedListener true
}
}
false
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this, R.id.nav_host)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
Run Code Online (Sandbox Code Playgroud)
为了 HomeFragment.kt
class HomeFragment : Fragment() {
override …Run Code Online (Sandbox Code Playgroud) android bottomnavigationview android-architecture-components android-jetpack android-architecture-navigation
我BottomNavigationView在自己的一个活动中使用了Android设计支持库中的,同时在每个导航项中都使用了Fragments。
每次我在栏上选择一个项目时,都会执行一个片段事务,如下面的代码片段(为简洁起见,删除了部分代码):
private var fragmentToSet: Fragment? = null
private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
fragmentToSet = when (item.itemId) {
// Choose fragment based on selection
// ...
}
// ...
supportFragmentManager.beginTransaction()
.replace(R.id.container, fragmentToSet)
.commit()
}
Run Code Online (Sandbox Code Playgroud)
问题是...底部小节动画变得超级滞后,并且仅在片段完全加载并显示在屏幕上之后才能完成。
这个问题并不完全是新问题,因为在使用“导航菜单”时也可能发生,但是至少可以通过使用来解决它,DrawerLayout.DrawerListener并且只有在抽屉关闭后才进行实际的Fragment事务。
我试图“缓存”片段,保留它们的引用以避免每次都重新创建对象(例如MyFragment.newInstance()),但这是行不通的。
我也尝试使用处理程序,这可以解决问题,但是在某些情况下可能会导致异常。类似于以下代码段:
handler.postDelayed({changeFragment(fragmentToSet!!)}, 200)
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以解决此问题,而无需使用处理程序(或其他异步调用),方法与使用导航菜单时的解决方案类似?
android android-fragments kotlin material-design bottomnavigationview
所以我想在屏幕底部有一个导航栏,有 4 个项目,但由于某种原因,只有第一个显示,其他只有当我点击它们时才会出现。
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/white"
app:itemTextColor="@color/black"
app:menu="@menu/navigation_bar_bottom_menu" />
Run Code Online (Sandbox Code Playgroud)
我的菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/nav_home"
android:title="@string/navigation_bar_home_text" />
<item
android:id="@+id/nav_inbox"
android:title="@string/navigation_bar_inbox_text" />
<item
android:id="@+id/nav_notes"
android:title="@string/navigation_bar_notes_text" />
<item
android:id="@+id/nav_profile"
android:title="@string/navigation_bar_profile_text" />
</menu>
Run Code Online (Sandbox Code Playgroud)
该栏显示如下,仅显示第一项:
我正在使用navigation component和BottomNavigationView,我面临一个问题,那就是当我从fragment1>2>5>4>3转到时,当我按下后退按钮时,我得到fragment1。我知道这是默认行为,但我不想要这个,我想保存它们,backstack所以当我按下后退按钮时,它应该转到fragment4 而不是 1。我一直在尝试和搜索,但找不到任何解决方案。我可以把fragment手动进backstack的kotlin?
我的代码:
活动_main.xml
<androidx.constraintlayout.widget.ConstraintLayout
.......................
.......................>
<androidx.appcompat.widget.Toolbar
................
................/>
<fragment
android:id="@+id/app_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:navGraph="@navigation/app_nav"
..............
............../>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/app_bottom_nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/white_grey_border_bottom"
app:menu="@menu/bottom_nav_menu"
app:labelVisibilityMode="unlabeled"
...........
.........../>
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
app_nav.xml
<navigation
...........
...........
android:id="@+id/app_nav"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.instagram_clone.ui.HomeFragment"
android:label="HomeFragment"
tools:layout="@layout/fragment_home"/>
.............
.............
.............
.............
</navigation>
Run Code Online (Sandbox Code Playgroud)
主活动.kt
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val binding = …Run Code Online (Sandbox Code Playgroud) android android-fragments bottomnavigationview android-architecture-components android-jetpack
android ×9
android-architecture-components ×2
xml ×2
android-architecture-navigation ×1
drawerlayout ×1
java ×1
kotlin ×1