标签: navigation-drawer

Android设置导航抽屉列表,打开所有设备屏幕的确切一半的屏幕

我想打开所有不同设备的屏幕一半的抽屉列表.我尝试将layout_margineleft 200dp或100dp的硬编码值写入抽屉列表.但它不适用于所有不同设备的设备.那么如何才能为抽屉列表保留一半的屏幕.我也尝试了各种功能,如setLeft(int)等.但由于我使用的是最低版本8,因此其中一些功能不起作用.所以请帮助我.提前致谢.

    mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist);
Run Code Online (Sandbox Code Playgroud)

xml为:

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/drawer_layout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@color/setting_background" >

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="match_parent"
 android:layout_height="fill_parent"
 android:layout_margin="@dimen/top_news_linear_margin"
 android:background="@color/news_list_divider_color"
 android:orientation="vertical"
android:padding="@dimen/top_news_linear_padding" >

</RelativeLayout>

<ListView
 android:id="@+id/drawer_list"
 android:layout_width="wrap_content"
 android:layout_height="fill_parent"
 android:layout_gravity="right"
 android:layout_alignParentTop="true"
 android:background="@color/setting_background"
 android:cacheColorHint="@android:color/transparent"
 android:choiceMode="singleChoice"
 android:divider="@color/news_list_divider_color"
 android:dividerHeight="@dimen/news_list_divider_height"
 />

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

android screen margins navigation-drawer

26
推荐指数
3
解决办法
3万
查看次数

Android导航抽屉和windowActionBarOverlay = true

我正在尝试在我的应用程序中实现新的Android导航抽屉.我创建了一个BaseActivity.java来处理Drawer设置和监听器,我有两个扩展这个基类的子活动.在第二个活动中,我计划使用以下attrs使用不同的操作栏样式:

<item name="android:windowActionBarOverlay">true</item>
<item name="android:background">@android:color/transparent</item>
Run Code Online (Sandbox Code Playgroud)

使操作栏透明,并使内容更丰富,因为我的布局中有一个图片标题.

我已经实现了这一点,但现在的问题是,因为内容正在扩展以利用使用ActionBar作为叠加层的额外空间,导航抽屉本身也在扩展并且它与ActionBar重叠,造成非常糟糕看布局:

在此输入图像描述

我想要做的是,实际内容(将用片段填充的框架布局)占用额外空间,但导航抽屉仍然位于操作栏下方,类似于Play音乐应用:

在此输入图像描述

关于我能做些什么来实现这一点的任何想法?

编辑所以,根据Ahmad的帮助,我marginTop只在ListView上设置.这是布局:

<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
          android:layout_marginTop="?android:attr/actionBarSize"
<!-- This was added after seeing the crazy effect, but does nothing -->
          android:layout_marginBottom="0dp"
          android:layout_marginLeft="0dp"
          android:layout_marginRight="0dp"
          android:layout_width="240dp"
          android:layout_height="fill_parent"
          android:layout_gravity="start"
          android:choiceMode="singleChoice"
          android:background="?attr/listviewBackground"
          />
Run Code Online (Sandbox Code Playgroud)

而现在,它对于顶部来说效果很好,但由于某种原因,在视图的底部也有一个边距,这对我来说根本没有任何意义.这是一个截图.

不确定是什么导致它:(

android overlay android-actionbar navigation-drawer

25
推荐指数
3
解决办法
2万
查看次数

如何在导航抽屉布局中添加标题?

[UPDATE]

我通过添加addHeaderView解决了这个问题:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTitle = mDrawerTitle = getTitle();
    mPlanetTitles = getResources().getStringArray(R.array.planets_array);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    LayoutInflater inflater = getLayoutInflater();
    ViewGroup mTop = (ViewGroup)inflater.inflate(R.layout.header_listview_menu, mDrawerList, false);
    mDrawerList.addHeaderView(mTop, null, false);
Run Code Online (Sandbox Code Playgroud)

================================

我的问题很简单!

我想如何在导航抽屉中添加标题?

我已经为每个项目创建了带有listview(图标+文本)的导航抽屉.

非常感谢,

在此输入图像描述

android android-layout android-menu navigation-drawer

25
推荐指数
2
解决办法
2万
查看次数

如何使Contextual ActionMode Bar覆盖appcompat-v7工具栏而不是导航抽屉?

我有一个应用栏和导航抽屉的活动.应用栏使用appcompat-v7库版本21. +中的新工具栏类实现,导航抽屉显示在其前面.

该活动包含一个列表视图,其中包含可以选择的项目,因此我显示了一个上下文操作栏(CAB).它是通过调用来启动的:

ActionBarActivity.startSupportActionMode(android.support.v7.view.ActionMode.Callback callback)
Run Code Online (Sandbox Code Playgroud)

默认情况下,CAB插入工具栏上方而不是覆盖它; 似乎CAB默认只覆盖真正的ActionBar.作为展现在这个答案中,CAB正确叠加时,这个主题属性设置工具栏:

<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)

但这也使得CAB覆盖了导航抽屉,根据材料设计规格,这是不正确的.主要的Android设计文档仍然建议在打开导航抽屉时隐藏CAB并在关闭时再次显示它,这可以用来"修复"问题,但它不应该是必要的.如上所述,Material设计规范没有指定当导航抽屉打开时应该隐藏CAB,并且因为导航抽屉应该在CAB上打开,隐藏CAB实际上是一种视觉分心.

有没有办法在CAB前面显示导航抽屉,同时还能覆盖工具栏?

android contextual-action-bar navigation-drawer android-5.0-lollipop android-toolbar

25
推荐指数
1
解决办法
4362
查看次数

导航抽屉 - syncState()做什么以及为什么应该在onPostCreate()中调用它?

我正在学习在Android中创建导航抽屉.阅读本文时,我无法理解以下代码:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}
Run Code Online (Sandbox Code Playgroud)

文件说:

将抽屉指示符/示能表的状态与链接的DrawerLayout同步.

这应该从您的Activity的onPostCreate方法调用,以便在DrawerLayout的实例状态恢复后进行同步,以及状态可能以不通知ActionBarDrawerToggle的方式分散的任何其他时间.(例如,如果您停止转发适当的抽屉事件一段时间.)

而且我读到onPostCreate()从sstn的答案在这里:OnPostCreate在片段

onPostCreate()主要用于框架使用(尽管你可以覆盖它).文档说它是在onStart()和onRestoreInstanceState()之后调用的.

这可能导致假设它可能在onResume()之前被调用,因此可能在消息循环调度事件之前(包括AsyncTask的onPostExecute()方法),这意味着你的onPostExecute()只会在onPause()之后触发.

由于onPostCreate()没有正确记录,并且不是真正用于应用程序 - 我可能想说依赖任何观察到的行为并不是一个好主意.

从这两个我无法理解.究竟做syncState()了什么以及为什么它应该在里面onPostcreate()?谁能更好地解释一下?

java android android-layout android-activity navigation-drawer

25
推荐指数
2
解决办法
6923
查看次数

Android - 导航查看项目菜单背景颜色

我尝试更改项目导航视图菜单的颜色:

styles.xml

<item name="android:activatedBackgroundIndicator">@drawable/activated_background</item>
Run Code Online (Sandbox Code Playgroud)

activated_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/White" />
    <item android:state_focused="true" android:drawable="@color/White" />
    <item android:state_activated="true" android:drawable="@color/White" />
    <item android:drawable="@android:color/transparent" />
</selector>
Run Code Online (Sandbox Code Playgroud)

drawer.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">

<group
    android:id="@+id/group_1">
    <item
        android:id="@+id/drawer_menu_account"
        android:checked="false"
        android:title="@string/menu_account"
        android:icon="@drawable/ic_account_grey600_24dp" />
    <item
        android:id="@+id/drawer_menu_my_post"
        android:checked="false"
        android:title="@string/menu_my_post"
        android:icon="@drawable/ic_pin_grey600_24dp" />
</group>
[...]
Run Code Online (Sandbox Code Playgroud)

背景颜色不改变..我做错了什么?

android navigation-drawer navigationview

25
推荐指数
3
解决办法
5万
查看次数

native.createnavigator 工厂不是一个函数

我将在我的项目中设计一个抽屉导航。

我通过这个命令安装了它:

npm install @react-navigation/drawer
Run Code Online (Sandbox Code Playgroud)

然后将其导入 App.js

import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';
Run Code Online (Sandbox Code Playgroud)

这是我的package.json内容:

"@react-native-community/masked-view": "^0.1.6",
"@react-navigation/drawer": "^5.0.0",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-gesture-handler": "^1.5.6",
"react-native-reanimated": "^1.7.0",
"react-native-screens": "^2.0.0-beta.1",
"react-native-view-shot": "^3.0.2",
"react-navigation": "^4.1.1",
"react-navigation-stack": "^2.1.0",
Run Code Online (Sandbox Code Playgroud)

这是我的App.js内容:

npm install @react-navigation/drawer
Run Code Online (Sandbox Code Playgroud)

我应该说我已经创建了LoginSecondPage组件并在一个名为的文件中声明了它们root.js

import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误(以下屏幕)。

我怎样才能解决这个问题?

在此处输入图片说明

索引.js

"@react-native-community/masked-view": "^0.1.6",
"@react-navigation/drawer": "^5.0.0",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-gesture-handler": "^1.5.6",
"react-native-reanimated": …
Run Code Online (Sandbox Code Playgroud)

navigation-drawer reactjs react-native react-navigation

25
推荐指数
3
解决办法
2万
查看次数

如何创建流畅的导航抽屉

我在导航抽屉中使用示例.当点击左侧抽屉列表视图的项目时,它会显示一些图像,但抽屉布局关闭不顺畅.

点击列表视图项后,我该怎么做才能平滑地关闭左侧抽屉布局.

android navigation-drawer

24
推荐指数
2
解决办法
2万
查看次数

如何在Action Bar的应用程序图标旁边添加"菜单"指示器?

至少Gmail和Youtube Android应用程序使用侧边菜单(导航抽屉?),通过滑动或单击应用程序图标(主页按钮)打开:

在此输入图像描述

屏幕截图中的菜单指示符/图标是Android SDK的现成部分吗?(或谷歌在他们的应用程序中使用的自定义图标?)无论如何,最简单的方法是让你的主页按钮看起来像这样,就像打开一个菜单一样?

(targetSdkVersion18; minSdkVersion14)

解析度

终于搞定了.少了什么对我来说是1)实际图标和2)递延调用syncState()ActionBarDrawerToggle.

android android-icons android-actionbar navigation-drawer android-homebutton

24
推荐指数
2
解决办法
4万
查看次数

你需要传递给v4.widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()

我一直在试图跨越到移动我的代码DrawerLayout作为由Android建议这里SlidingDrawer已经过时了.

我的问题是,到目前为止DrawerLayout似乎要么执行得非常糟糕,有无用的错误消息(没有防御性编程)和/或在文档中没有得到足够的解释.

这个isDrawerOpen()方法在这里描述:

public boolean isDrawerOpen(查看抽屉)

检查给定的抽屉视图当前是否处于打开状态.为了被视为"开放",抽屉必须已经稳定在其完全可见的状态.要检查部分可见性,请使用isDrawerVisible(android.view.View).

参数:drawer - 要检查的抽屉视图

返回:如果给定的抽屉视图处于打开状态,则返回true

每个方法isDrawerOpen(View drawer),openDrawer(View drawer)并且closeDrawer(View drawer)在传递时不起作用:DrawerLayout有问题或者其中任何一个的孩子.我不知道我应该为这些方法提供什么来让它们发挥作用.有人能告诉我吗?

有关实现,请参阅下面的整个问题描述.

我有这样的布局:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/mainmenuPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/dualPane"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:id="@+id/menuPane"
        android:layout_width="300dp"
        android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我将以下方法连接到一个按钮:

protected void onCreate(Bundle savedInstanceState) {    
    ...
    mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
    ....
}

public boolean isDrawerOpen() {
    if(mMenuPanel != null) {
        return mMenuPanel.isDrawerOpen(mMenuPanel);
    }
    return false;
} …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer drawerlayout

24
推荐指数
2
解决办法
9310
查看次数