基于本教程和这个答案,也引用了这个其他教程,使用主题android:windowBackground和一个<layer-list/>似乎是最批准的创建Android启动画面的方法
使用这种技术将徽标集中在屏幕上很容易; 但是,我想在屏幕的顶部或底部放置图形.我遇到了问题,因为如下面的屏幕截图所示,windowBackground屏幕顶部的状态栏和底部的导航栏背后都显示出来,因此图形显示为截止
问题: 是否可以指示将windowBackground自己定位在状态栏下方和导航栏上方?如果没有,使用windowBackground启动画面技术是否可以创建状态栏或导航栏未涵盖的启动画面?
要重现该问题,请创建一个新的Android Studio项目,该项目将为您提供ic_launcherdrawable并按照上面链接的其中一个教程但使用以下layer-listdrawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="#000000"/>
<item>
<bitmap
android:gravity="left|top"
android:src="@drawable/ic_launcher"/>
</item>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ic_launcher"/>
</item>
<item>
<bitmap
android:gravity="bottom"
android:src="@drawable/ic_launcher"/>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud) 使用"设计支持库"版本时23.0.1,NavigationView默认情况下,菜单项会在选中时支持波纹动画.但是,升级到Design Support Library版本时23.1.0,波纹动画似乎丢失了.这是一个错误吗?还有其他人注意到这一点并且可以复制它吗?而且,更好的是,有没有人有解决方案?
我首先在使用NavigationViewvia Design Support Library 时发现了这个问题,23.4.0并注意到菜单项没有涟漪效应.然而,直到我按照AndroidForDevs提供的本 NavigationView教程,我才能将责任归咎于Design Support Library版本23.1.0.
复制和重现该问题,结帐本教程的示例代码,它利用设计支持库版本22.2.0,并撞击版本23.1.0在应用程序的的build.gradle.然后,您会注意到菜单项在选中时不会出现波纹.但是,如果您还原为版本,22.2.0或者23.0.1在选择时您会注意到这些项目会出现波纹.
作为参考,这里是支持库更改日志的链接.虽然它提到允许自定义视图的更新,但NavigationView我无法想到为什么这可能导致默认情况下消除涟漪效应,因为它听起来无关紧要.这是逐字逐句的变更说明
通过使用
app:actionLayout属性或MenuItemCompat.setActionView()方法添加了对NavigationView类的自定义视图的支持.
注意:当选择菜单项时阻止抽屉关闭时,最容易看到此问题.这可以通过评论这一行来实现
在下面的 GIF 中,您会看到我在协调 (heh)包含CollapsingToolbarLayout和Persistent BottomSheet的AppBarLayout 时遇到了麻烦,它们可以很好地协同工作

目标: 让片段内容,如上图绿松石色 ( #26999f ) 保持在上方,但滚动到下方,BottomSheet,如上图深绿色(#12783e),同时也尊重 AppBarLayout 及其行为
同样,正如您从 GIF 中看到的那样,我很接近;片段内容使用自定义 layout_behavior,MyScrollingViewBehavior,它扩展了AppBarLayout.ScrollingViewBehavior
在下面的代码片段中,如果是 a (本例中的BottomSheet)或任何( ) 依赖于的实例,您将看到MyScrollingViewBehavior#layoutDependsOn返回truedependencyRelativeLayoutsuperAppBarLayout.ScrollingViewBehavior#layoutDependsOn
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
return dependency instanceof RelativeLayout ||
super.layoutDependsOn(parent, child, dependency);
}
Run Code Online (Sandbox Code Playgroud)
在MyScrollingViewBehavior#onDependentViewChanged如果dependency是的一个实例RelativeLayout,这意味着依赖是BottomSheet,孩子,又名片段的内容,可向上或向下移动使用offsetTopAndBottom,以确保它仍然是BottomSheet以上
@TargetApi(VERSION_CODES.LOLLIPOP)
@Override
public boolean onDependentViewChanged(CoordinatorLayout …Run Code Online (Sandbox Code Playgroud) android android-layout android-coordinatorlayout android-appbarlayout bottom-sheet