我有一个ActionBarActivity其中有导航抽屉的片段。当按下导航抽屉中的某个项目时,它会启动相应的片段。在每个片段中,该onCreate()方法如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTheme(R.style.AppTheme);
setHasOptionsMenu(true);
}
Run Code Online (Sandbox Code Playgroud)
然而,每个片段所应用的主题都不同。
我注意到该方法似乎没有更改我引用的 中声明的 或 状态栏setTheme()的颜色:ActionBarstyles.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/brand_red_primary</item>
<item name="colorPrimaryDark">@color/brand_red_primaryDark</item>
<item name="android:actionBarStyle">@style/AppTheme.ActionBarStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)
同样,我的活动中的不同片段有不同的样式colorPrimary和不同的属性。colorPrimaryDark
因此,该setTheme()方法不会更改状态ActionBar栏或状态栏的颜色,但它确实会更改一些内容,例如列表视图中回拉功能的颜色。
我是否遗漏了什么,或者我需要做什么来setTheme()更改ActionBar状态栏颜色?
我尝试了此处发布的解决方案,但它给出的结果与我之前尝试过的结果完全相同(使用setTheme())。
android android-theme android-fragments navigation-drawer android-styles
正如我的问题中所描述的,我希望在向上滑动时能够向上滑动一个小片段。它基本上应该像 AndroidStudio 提供的导航抽屉一样工作。问题是导航抽屉可以从片段中的左侧或右侧滑动,但不能从底部滑动。\n由于没有\xc2\xb4t之类的“onSwipeUp”事件,我不知道如何\n可以创建解决方法。\那么是否可以从底部向上滑动片段,如果可以,如何滑动?
\n我一直在寻找一种方法来更改导航抽屉中的特定字体颜色。我可以更改其他项目标题的字体颜色,但不能更改包含菜单的项目标题的字体颜色。
<group
android:id="something"
android:checkableBehavior="single>
<item
android:title="Menu Heading> <--This is what I want to change-->
<menu>
<item android:title="stuff"/> <--This i can change-->
<item android:title="stuff"/>
</menu>
</item>
</group>
Run Code Online (Sandbox Code Playgroud)
我可以在主要活动中使用 app:itemTextColor 更改所有其他标题颜色。我尝试更改主题的替代字体颜色。总的来说,我对编程还比较陌生,所以我假设我遗漏了一些东西。我唯一能想到的就是使用操作布局并在项目中膨胀自定义布局,但我不想重做所有的 onClicks。因为我的设计师想要深色菜单,并且无论到目前为止主题如何变化,文本都默认为黑色。
我将设置可见导航项(真或假)作为某些条件。
item = (MenuItem)getActivity().findViewById(R.id.find_doctor_nav);mInsertBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {if(type.equals("Doctor")){
item.setVisible(false);
}
if(type.equals("Patient")){
item.setVisible(true);
}
CharSequence text = "User session start..!";
Toast toast = Toast.makeText(getContext(), text, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我要执行此操作的一段代码。但这是给我错误
空对象引用上的 android.view.MenuItem android.view.MenuItem.setVisible(boolean)'
我正在片段类中进行操作,但它不适用于我的代码。请建议我一些适当的解决方案。谢谢....
当用户单击菜单项时,导航抽屉不会将用户带到目的地。抽屉式导航栏显示正确,但不起作用。有什么问题吗?
我有一个导航菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
...
<item
android:id="@+id/feedbackFragment"
android:icon="@drawable/ic_help"
android:title="@string/title_help" />
</group>
</menu>
Run Code Online (Sandbox Code Playgroud)
和导航图:
<fragment
android:id="@+id/feedbackFragment"
android:name="com.company.ru.ui.FeedBackFragment"
android:label="fragmegment_feedback"
tools:layout="@layout/fragment_feed_back" />
Run Code Online (Sandbox Code Playgroud)
在我的 MainActivity 中,我有一个工具栏(全部复制):
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:navGraph="@navigation/main_graph" />
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/color_white"
android:theme="@style/NavigationView"
app:headerLayout="@layout/nav_header"
app:itemIconPadding="@dimen/margin_16"
app:itemIconTint="#FFD000"
app:itemTextColor="@android:color/black"
app:menu="@menu/navigation_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
我这样初始化我的抽屉:
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); …Run Code Online (Sandbox Code Playgroud) 我在 Kotlin 中创建了一个新的 Android 项目。我还使用向导创建了一个新的导航抽屉活动。和往常一样,没有什么是开箱即用的。
以下几行显示了编译错误:
val navController = findNavController(R.id.nav_host_fragment)
Run Code Online (Sandbox Code Playgroud)
我必须导入该方法并添加第一个参数 ??:
import androidx.navigation.Navigation.findNavController
...
val navController = findNavController(this, R.id.nav_host_fragment)
Run Code Online (Sandbox Code Playgroud)
现在下一行显示编译错误:
val navController = findNavController(this, R.id.nav_host_fragment)
return navController.navigateUp(appBarConfiguration) // does not compile
Run Code Online (Sandbox Code Playgroud)
错误:
"Too many arguments for public open fun navigateUp(): Boolean defined in androidx.navigation.NavController"
Run Code Online (Sandbox Code Playgroud)
我的 gradle 配置中有以下依赖项:
implementation 'androidx.navigation:navigation-ui-ktx:2.0.0'
Run Code Online (Sandbox Code Playgroud)
它包含NavController.kt文件,其中包含扩展功能。问题出在哪里?
我正在创建一个包含导航抽屉活动的应用程序。我正在主屏幕中加载不同的片段。现在,当我必须调用 Fragment 时,它工作得很好,但是当我想调用某种服务(例如调用、图像选择器)时,我添加了 setNavigationItemSelectedListener ,它工作得很好,但所有其他片段现在都没有加载。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.nav_franchise,
R.id.nav_tieUP, R.id.nav_giftVoucher, R.id.nav_faq, R.id.nav_privacy_policy,
R.id.nav_tools, R.id.nav_send)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem …Run Code Online (Sandbox Code Playgroud) 我的导航菜单中有 8 个项目。我为其中 5 个设置了片段,我想为最后 3 个设置吐司。当我不设置案例 2 时,案例 1 运行良好。但是当我设置案例 2 时,案例 1 不起作用。
情况1 :
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
//define in mobile_navigation.xml
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_update_data, R.id.nav_notifications,
R.id.nav_stop, R.id.nav_change_pass)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
Run Code Online (Sandbox Code Playgroud)
案例2:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) …Run Code Online (Sandbox Code Playgroud) 我想在抽屉导航底部进行注销和设置,但我尝试了很多建议,但没有任何建议?
这是我的抽屉导航
Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
_createHeader(),
_createDrawerItem(icon: Icons.event, text: 'Event', onTap: () => Navigator.pushReplacementNamed(context, Routes.event)
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
_createFooterItem(icon: Icons.event, text: 'Settings', onTap: () => Navigator.pushReplacementNamed(context, Routes.event)),
_createFooterItem(icon: Icons.event, text: 'Logout', onTap: () => Navigator.pushReplacementNamed(context, Routes.event))
],
),
],
),
);
Run Code Online (Sandbox Code Playgroud)
这是我的标题小部件
Widget _createHeader() {
return DrawerHeader(
margin: EdgeInsets.zero,
padding: EdgeInsets.zero,
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: AssetImage('res/images/drawer_header_background.png'))),
child: Stack(children: <Widget>[
Positioned(
bottom: 12.0,
left: 16.0,
child: Text("Flutter …Run Code Online (Sandbox Code Playgroud) 当我向右滑动时,我的抽屉打开,但我希望使用标题中的按钮打开它。我已将 DrawerNavigator 'createDrawer ' 放置在 StackNavigator 'createHomeStack' 旁边。
我收到此错误:
参考错误:找不到变量:导航
我也尝试过这个:options={({ navigation }) => ({但随后出现错误:
类型错误:navigation.toggleDrawer 不是函数。(在“navigation.toggleDrawer()”中,“navigation.toggleDrawer”未定义)
代码:
import React from 'react';
import { TouchableOpacity } from 'react-native';
import {
NavigationContainer,
DrawerActions,
DefaultTheme,
DarkTheme,
useNavigation,
} from '@react-navigation/native';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { createStackNavigator } from '@react-navigation/stack';
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
import {
Appearance,
useColorScheme,
AppearanceProvider,
} from 'react-native-appearance';
import Feed from './src/feed';
import Detail from './src/detail';
import Screen1 from './src/screens/drawer/screen1';
import Screen2 from './src/screens/drawer/screen2'; …Run Code Online (Sandbox Code Playgroud)