我正在尝试从Android支持库中获取新的BottomNavigationView.对于其中一个菜单项,我希望有一个自定义视图,以便我可以以编程方式添加圆形用户图像作为图标.
使用后,使用此支持组件或roughhike/BottomBar库似乎不可能.有任何想法吗?关于如何在菜单中使用布局作为图标以及如果可以使用BottomNavigationView或其他库,可以简化问题.
BottomNavigationView不允许禁用shift模式在新版本的支持库中修复此问题?
还有一些使用反射机制的解决方案我不认为它的正确方法是解决这个主要问题.
android android-support-library androiddesignsupport bottomnavigationview
我无法定位我的FAB.它应该在右下角,但在BottonNavigationView之上.
1)我可以在coordinateLayout内部没有RelativeLayout的情况下实现这一点吗?
2)告诉我如何
3)我应该使用FrameLayout作为片段的容器吗?
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</FrameLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_electricity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
app:layout_anchorGravity="bottom|right|end"
app:srcCompat="@drawable/ic_add_electro" />
<android.support.design.widget.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom">
</android.support.design.widget.BottomNavigationView>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
我创建了一个底部导航栏.我在res下创建一个menu.xml.我将BottomNavigation添加到主布局.
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/menu"
app:layout_scrollFlags="scroll|enterAlways|snap"
/>
Run Code Online (Sandbox Code Playgroud)
但我想以编程方式添加项目.我能怎么做?BottomNavigation 指南说明了这一点
可以通过指定菜单资源文件来填充条形内容.每个菜单项标题,图标和启用状态将用于显示底部导航栏项.菜单项也可用于以编程方式选择当前活动的目的地.可以使用MenuItem#setChecked(true)来完成
我知道使用xml是一个填充的解决方案,但不仅仅是创建底部导航的方法.
我在onCreate函数中使用下面的代码添加一个新项:
Menu menu = bottomNavigationView.getMenu();
menu.add(0, id, Menu.NONE, "NEW ITEM");
Run Code Online (Sandbox Code Playgroud)
它无法正常工作.我只能在导航栏上看到一个项目.当我可以按下项目的区域时,项目出现(其他项目消失).
编辑
我发现了问题.如果我在导航栏上放置了3个以上的项目,则会出现此问题.还有一个问题,关于这个问题.解决方案有效!
以下是我的布局xml.现在的问题是BottomNavigationView与FrameLayout重叠.我希望FrameLayout延伸到BottomNavigationView的顶部.
我尝试使用技巧,例如在FrameLayout中添加paddingBottom,但我想知道是否还有其他更好的解决方案.谢谢.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<include layout="@layout/user_app_bar"/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/navigation"
app:itemTextColor="@color/colorPrimaryDark"
app:itemIconTint="@color/colorPrimaryDark"
/>
<FrameLayout
android:id="@+id/fragment_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="58dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
app:layout_anchorGravity="bottom|end"
app:layout_anchor="@id/app_bar"
app:srcCompat="@drawable/ic_edit_white_24px" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
更新:有关user_app_bar.xml的更多信息.它包含一个CollapsingToolbarLayout.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout 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:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:layout_behavior="co.domain.DisableAppBarLayoutBehaviour"
>
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:titleEnabled="false"
app:contentScrim="?attr/colorPrimary">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_collapseMode="parallax">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_marginBottom="0dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:contentDescription=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" …Run Code Online (Sandbox Code Playgroud) 我试图用CoordinatorLayout一个BottomNavigationView,一个AppBarLayout,和ViewPager.这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="enterAlways|scroll"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:itemIconTint="?colorPrimaryDark"
app:itemTextColor="?colorPrimaryDark"
app:menu="@menu/navigation"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
问题是,CoordinatorLayout地方ViewPager延伸到屏幕的底部,所以底部被掩盖BottomNavigationView,就像这样:
即使CoordinatorLayout本身到目前为止还没有延伸,这种情况会发生:
我试着加入app:layout_insetEdge="bottom"到BottomNavigationView和app:layout_dodgeInsetEdges="bottom"到ViewPager,但有一个不同的问题:它改变了底部ViewPager,但它保持相同的高度,使顶部现在剁掉:
我尝试了另外两个实验.首先,我尝试将它们BottomNavigationView从 CoordinatorLayout垂直方向移除并使它们成为兄弟姐妹LinearLayout.其次,我把ViewPager和BottomNavigationView一起下LinearLayout …
android android-layout coordinator-layout bottomnavigationview
我正在探索上个月在Google I/O 2018中引入的"导航架构组件"概念.
假设我有一个带有底部导航视图和'片段'的活动来托管所有片段: -
<android.support.constraint.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.MainActivity">
<fragment
android:id="@+id/root_form"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
我的底部导航视图中有2个动作/标签,分别显示FragmentA和FragmentB.FragmentB有一个嵌套的(子)片段FragmentC,它可以从FragmentB打开.
在我的Activity类中,我使用'setupWithNavController()'函数将底部导航视图与导航控制器链接起来.(包含在'androidx.navigation.ui'包中的Kotlin扩展函数): -
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
bottom_navigation.setupWithNavController(findNavController(R.id.root_form))
}
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作正常.
但是当用户在FragmentC中并且返回agin到相同的选项卡时,用户导航到FragmentA然后他将只获得FragmentB而不是fragmentC.当用户返回相同的选项卡时,它是底部导航中的常见模式,它应显示他正在查看的最后一个子/嵌套片段.
我知道如果我们有自己的片段事务但是如何在"导航架构组件"域中解决此问题,我们可以处理这个问题?
navigation android bottomnavigationview android-architecture-components android-jetpack
请 在任何人将其作为重复问题之前先阅读,因为它不是.
我使用了导航抽屉,底部导航栏和自定义操作栏.
底部导航栏和操作栏工作正常.导航抽屉还显示其下的菜单,但项目不可点击.
我已经尝试了所有相关的答案
导航抽屉项目单击不起作用
但我的问题还没有解决.调试部分没有错误.


仪表板活动
package com.vicky.sampleApp;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v7.widget.Toolbar;
public class Dashboard extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
//android.app.ActionBar actionbar;
TextView textview;
TextView textviewTitle;
private ActionBar toolbar;
private DrawerLayout drawer;
private ActionBarDrawerToggle toggle;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle …Run Code Online (Sandbox Code Playgroud) android navigation-drawer android-navigationview bottomnavigationview
目标:
1)使状态栏透明 - 完成
2)充分利用BottomNavigationView和Navbar相同的颜色.- 差不多完成了
问题
通过在我的代码中添加以下代码Activity,状态栏变为透明.但是,BottomNavigationView落在了下面NavBar.如果我删除这行代码,则StatusBar不再是透明的.你觉得我在这痛苦吗?此外......如何让布局的TOP位于状态栏下方?
活动中的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
Run Code Online (Sandbox Code Playgroud)
活动XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="false">
<com.custom.app.view.ClickableViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/tab_layout" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@color/custom_black"
app:itemIconTint="@color/white"
app:itemTextColor="@color/white"
app:menu="@menu/bottom_navigation_main" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
Style.xml
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item …Run Code Online (Sandbox Code Playgroud) android ×10
android-architecture-components ×1
java ×1
menuitem ×1
navbar ×1
navigation ×1
styles ×1
xml ×1