Android绘制导航栏

时间:2017-08-17 09:58:40

标签: android android-layout android-navigation-drawer

早上好Stackers!

我最近成为Galaxy S8的自豪拥有者。 但是,我对三星Edge Lighting功能感到失望。 所以,我决定把自己投入Android应用程序的世界,并尝试自己编写类似的应用程序。 很自豪地说我走得很远,但是,我不仅仅是在这里分享我的成功。

我的问题与导航栏有关。由于这是我在Stack上的第一个问题,我不确定如何将这个问题组织起来,所以我只是将照片放在这里,并在它们下面加上补充。

我为使用链接而不是直接发布图片而道歉。我是Stack的新手,因此没有足够的声望点来发布图片。 Sadlife。

这是我的这种戒指版本的屏幕截图,没有导航栏。

My app without navigation-bar

在我看来看起来相当不错! :3

但是,如果我将其用于强制显示导航栏的应用程序,我的"覆盖"被推高,就像这样:

My app with navigation-bar

现在让我解释一下到目前为止我所尝试过的内容。 基本上,我尝试了两个View标志的每个组合,以及WindowManager.LayoutParams标志。我在XML文件中也只是使用叠加的样式搞砸了很多。

您在上面看到的屏幕截图是使用以下配置进行的:

对于LayoutParams:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
                    | WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR
                    | WindowManager.LayoutParams.FLAG_FULLSCREEN
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
            PixelFormat.TRANSLUCENT
        );

对于View标志:

mTopView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    );

叠加层的XML样式:

<style name="OverlayDialog" parent="android:style/Theme.Translucent.NoTitleBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

叠加布局文件本身如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/notification"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@android:id/navigationBarBackground"
    android:background="@android:color/transparent"
    android:clipToPadding="false"
    android:fitsSystemWindows="true"
    android:focusable="false"
    android:orientation="vertical"
    android:theme="@style/OverlayDialog" >

<ImageView
    android:id="@+id/vector_drawable_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:fitsSystemWindows="true"
    android:background="@drawable/vector_drawable"
    android:backgroundTint="@android:color/holo_blue_bright"
    android:backgroundTintMode="src_in"
    android:focusable="false"
    android:theme="@style/OverlayDialog"
    android:visibility="visible" />

我还尝试了在y轴上有偏移的WindowManager.LayoutParams,以强制它。这确实有效,但是当你打开一个没有通知栏的应用程序时,叠加层会被推回到屏幕下方(希望我可以发布截图)。 无论如何,这是代码:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(-1, -1, 0, -100, 
        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
                | WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR
                | WindowManager.LayoutParams.FLAG_FULLSCREEN
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
        PixelFormat.TRANSLUCENT
    );

所以,为了总结一下,我给你留下了一个问题: 如何创建我的布局,使其不会被导航栏向上推。

如果您需要更多信息,请不要犹豫! 提前谢谢并保重!

1 个答案:

答案 0 :(得分:0)

我没有得到很多你的问题,但我认为你想要你的底部导航栏不应该干扰布局的其他部分所以我建议你应该去Android Studio 2.2及更高版本中给出的每个底部导航活动或者您可以使用包含其他布局的协调器布局....

Check out this layouts this gives some of the materiel design

enter image description here

来自http://www.androidauthority.com/using-coordinatorlayout-android-apps-703720/

的图片来源

enter image description here