有没有办法将BottomNavigationView代码中新设计库的背景颜色设置为自定义颜色值而不是颜色资源?任何"技巧"可能吗?
我目前的解决方案
BottomNavigationView透明bottomNavigationView但这看起来很丑陋,特别是因为我必须使用自定义行为为背景视图与BottomNavigationView父级中的CoordinatorLayout... 进行并行动画...
我想清除BottomNavigationView的选择,因此不会选择任何项目.
我有一个辅助工具方法:
public static void clearSelection(BottomNavigationView view) {
final BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
item.setChecked(false);
}
}
Run Code Online (Sandbox Code Playgroud)
这种工作方式,但不会将项目的颜色重置为未选中的项目(仅删除凸起的动画并规范化字体大小).
要设置BottomVanigationItemView颜色,我使用颜色选择器根据选中的状态设置颜色:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:color="@color/colorPrimaryLight" />
<item android:color="@color/colorPrimaryLightTransparent" />
</selector>
Run Code Online (Sandbox Code Playgroud)
我试过了:
item.invalidate();
menuView.invalidate();
Run Code Online (Sandbox Code Playgroud)
那没用.如何强制视图根据颜色选择器重置颜色值?
正如您在此gif中看到的那样:https : //gyazo.com/fc2f8e8ae9fbdae1b06d88336e76bc05
轻按图标时,将播放绿色的动画。默认情况下,此颜色为灰色。如何将其更改为其他颜色?
我正在使用带有底部导航视图的简单应用程序。我有3个片段(布局和Java)。我有在我的MainActivity.java中声明的BottonNavigationView。我的bottonnavigation有3个项目,分别是3个片段。因此,在我的MainActivity.java中,当我选择一个项目时,它将开始一个片段。因此,当我再次选择另一个项目时,什么也没有发生,因为在Java片段中我需要声明BottonNavigationView,但是我不知道如何设置它以将实际片段与另一个片段切换。我尝试了此链接,但没有成功:https : //developer.android.com/training/basics/fragments/fragment-ui.html
对不起,我的英语不好
这里的代码:
主要活动
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
selectedFragment = HomeFragment.newInstance();
break;
case R.id.navigation_dashboard:
selectedFragment = DashboardFragment.newInstance();
break;
case R.id.navigation_notifications:
selectedFragment = NotificationsFragment.newInstance();
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content, selectedFragment);
transaction.commit();
return true;
}
Run Code Online (Sandbox Code Playgroud)
片段Java示例
public class HomeFragment extends Fragment {
public static HomeFragment newInstance() {
HomeFragment fragment = new HomeFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud) 我有一个 Main Activity,它使用 TabSelectedListener 来显示 AHBottomNavigation 菜单的片段。名为“FirstFragment”的片段包含一个 FragmentPagerAdapter,它允许用户在两个选项卡之间滑动,每个选项卡都有自己的片段,称为 FirstTabInFirstFragmentFragment 和 SecondTabInFirstFragmentFragment(为简单起见重新命名)。
我的问题是:
一种)。启动 Main Activity 时,会选择“First”底部导航菜单项,但不会启动“FirstFragment”。因此,它以空白屏幕显示选择的正确项目。如果我再次点击菜单项,它只会启动第一个片段。
b)。一旦 FirstFragment 被正确启动并显示在屏幕上(通过 a 中的临时修复),如果我选择一个不同的菜单项(即导航到 SecondFragment)然后再次选择 FirstFragment 的菜单项,里面的两个选项卡它是空白的。此外,两个标签的片段之间的滑动不起作用并被“卡住”,因此您必须将其一直拉到一侧或一直拉到另一侧。
希望我已经清楚地解释了我的问题 - 如果我遗漏了什么,我可以提供更多细节。
请注意,我正在使用com.aurelhubert.ahbottomnavigation.AHBottomNavigation
以下是相关文件:
主活动.java :
public class MainActivity extends AppCompatActivity{
private AHBottomNavigationAdapter navigationAdapter;
private AHBottomNavigationViewPager viewPager;
private AHBottomNavigation bottomNavigation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Add menu items to bar
bottomNavigation = (AHBottomNavigation) findViewById(R.id.bottom_navigation);
this.createNavItems();
bottomNavigation.setOnTabSelectedListener(new AHBottomNavigation.OnTabSelectedListener() {
@Override
public boolean onTabSelected(int position, boolean wasSelected) {
//show fragment
if (position==0) …Run Code Online (Sandbox Code Playgroud) android android-fragments bottomnavigationview android-bottomnav android-bottom-nav-view
我正在将一个BottomNavigationBar与一个TabController一起使用。通过单击BottomNavigationBar的不同选项卡,TabView可以更改内容。但是,如果我在TabView上滑动以切换到另一个视图/选项卡,则BottomNavigationBar不会更新为我滑动至的选项卡。我已经在TabController中添加了一个侦听器以检测更改。但是,如何以编程方式更新BottomNavigationBar以反映更改?
我正在寻找我目前在我的底形游览视图中使用的Vectordrawablawables,当为猫头鹰应用程序的本材料产品学习时选择了一个选项卡时。但是,与工具栏视图不同,当我使用 MenuItem.getIcon() 获取图标时,将其转换为 AnimatedVectorDrawable 并调用 animate() 方法,没有动画。
我想知道我是否可以做些什么来实现这一点,这是否可能包含在稳定的 Material Components 库中,或者我是否最好创建一个扩展 BottomNavigationView 类的自定义视图。
android material-design bottomnavigationview material-components material-components-android
顶部选项卡仅显示主页,它们通过滚动或点击显示 3 个不同的页面,以及整个应用程序(如菜单)的底部选项卡。
当我编写代码时,我得到如下图所示的视图,但我无法点击或重定向页面。
导航代码我只给出了顶部或底部选项卡,而不是两个选项卡。
主页.dart
class _HomePageState extends State<HomePage> with SingleTickerProviderStateMixin {
TabController tabController;
//TabController bottomController;
Icon searchBtn = new Icon(Icons.search);
Widget appBarTitle = new Text('Invoices');
@override
void initState(){
super.initState();
tabController = new TabController(vsync: this, length: 3);
//bottomController = new TabController(vsync: this, length: 4);
}
@override
void dispose(){
tabController.dispose();
//bottomController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
color: Colors.purpleAccent,
debugShowCheckedModeBanner: false,
home: DefaultTabController(
length: 3,
child:Scaffold(
appBar: new AppBar(
centerTitle: false,
title: appBarTitle,
backgroundColor: Color(0xFF832685),
actions: …Run Code Online (Sandbox Code Playgroud) 我在我的项目中添加了一个底部导航活动,但是当我开始相关活动时,它给出了一个空指针异常。
它说异常是在第 28 行触发的
在 lk.apiit.eea.mobile.Activities.CompanyProfile.onCreate(CompanyProfile.java:28)
以下是异常和代码请帮我解决这个问题..谢谢
java.lang.RuntimeException: Unable to start activity ComponentInfo{lk.apiit.eea.mobile/lk.apiit.eea.mobile.Activities.CompanyProfile}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2720)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2781)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1508)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:6274)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
at androidx.navigation.ui.ActionBarOnDestinationChangedListener.setTitle(ActionBarOnDestinationChangedListener.java:48)
at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.java:100)
at androidx.navigation.NavController.addOnDestinationChangedListener(NavController.java:218)
at androidx.navigation.ui.NavigationUI.setupActionBarWithNavController(NavigationUI.java:220)
at lk.apiit.eea.mobile.Activities.CompanyProfile.onCreate(CompanyProfile.java:28)
at android.app.Activity.performCreate(Activity.java:6720)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2673)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2781) …Run Code Online (Sandbox Code Playgroud) android appbar nullpointerexception android-studio bottomnavigationview
我在我的应用程序中使用 BottomNavigationView 和 3 个选项卡。我想实现类似导航的 Instagram,保存每个部分片段状态。首先我使用导航组件,但很难保存每个选项卡(部分)的状态。然后我找到了一些库,比如 flow、cicerone、fragnav、simple-stack。
flow、cicerone、fragnav、simple-stack 的特点是什么以及何时使用它们?
我有 2 个活动和 MainActivity。Mvvm 架构、dagger2、kotlin