我已经使用https://github.com/umano/AndroidSlidingUpPanel实现了UmanoSlIDingPanel.除了滑动面板展开后,滑动内容(slIDing_vIEw)移到状态栏下方,一切都正常.我该如何避免呢?
<item name="androID:windowTranslucentStatus">true</item>
来自styles.xml的内容,但这也使状态栏对于主要内容也不透明.有任何解决这个问题的方法吗?
<com.sothree.slIDinguppanel.SlIDingUpPanelLayout xmlns:sothree="http://schemas.androID.com/apk/res-auto" androID:ID="@+ID/slIDing_layout" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:gravity="bottom" sothree:umanoDragVIEw="@+ID/firstPanelDragArea" sothree:umanopanelHeight="@dimen/bottom_panel_height" sothree:umanoShadowHeight="4dp"> <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical"> <include androID:ID="@+ID/toolbar" layout="@layout/toolbar" /> <FrameLayout androID:ID="@+ID/frame_container" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" /> </linearLayout> <!-- SLIDING LAYOUT --> <linearLayout androID:ID="@+ID/firstPanelDragArea" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical"> <include layout="@layout/slIDing_vIEw" /> </linearLayout>
styles.xml
<style name="Apptheme" parent="@style/theme.AppCompat"> <item name="windowActionbar">false</item> <item name="androID:windowNoTitle">true</item> <item name="androID:windowTranslucentNavigation">true</item> <item name="androID:windowDrawsSystembarBackgrounds">true</item> <item name="androID:windowTranslucentStatus">true</item> <item name="windowNoTitle">true</item></style>
编辑
public voID onPanelSlIDe(VIEw panel, float slIDeOffset) { if (slIDeOffset > 0.5 && !flagtransparent) { getwindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getwindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); flagtransparent = true; Log.i(TAG, "onPanelSlIDe, offset " + slIDeOffset); } else if (slIDeOffset < 0.5 && flagtransparent){ getwindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getwindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); flagtransparent = false; Log.i(TAG, "onPanelSlIDe, offset " + slIDeOffset); }
解决方法:
1)看一下我创建的以下Gist.
文件slIDe_up_activity.xml可能是活动布局,其中包括您向上滑动的面板视图.
您应该在此处设置androID:fitsSystemwindows =“ true”,以便正确插入任何子级,不要落在 *** 作栏或导航栏后面.
文件slIDe_vIEw.xml可能是您向上滑动的视图.
您无需在任何面板回调中执行任何其他 *** 作.
您可以安全地删除onPanelSlIDe()中的半透明样式和代码.这将导致滑动面板正确插入,从而永远不会落后于状态栏或导航栏.
另外,如果您没有相同的架构,则可以忘记slIDe_up_activity.xml,而在CoordinatorLayout中的androID:fitsSystemwindows =“ true”设置为slIDe_vIEw.xml.
2)我们正在谈论的第二件事是使状态栏变为半透明,让向上滑动的面板落在状态栏后面,然后平滑地添加填充以正确插入内容.
为此,设置androID:fitsSystemwindows =“ false”或将其从向上滑动面板具有的任何父对象中删除.
然后在onPanelSlIDe中,您可以执行以下 *** 作
if (slIDeOffset >= ANCHOR_POINT) { // adjust the span of the offset float offset = (slIDeOffset - ANCHOR_POINT) / (1 - ANCHOR_POINT); // the padding top will be the base original padding plus a percentage of the status // bar height float paddingtop = mSlIDePanelBasepadding + offset * mStatusbarInset; // apply the padding to the header container mContainer.setpadding(0, (int) paddingtop, 0, 0); }
哪里:
> mSlIDePanelBasepadding将是您向上滑动面板的初始填充
> mStatusbarInset将是状态栏的高度.
当它超过锚点时,应该逐渐向您的slIDeUp面板添加填充.
您可以像这样获取状态栏的高度:
public int getStatusbarHeight() { int result = 0; int resourceID = getResources().getIDentifIEr("status_bar_height", "dimen", "androID"); if (resourceID > 0) { result = getResources().getDimensionPixelSize(resourceID); } return result;}
我希望这个能有一点帮助.
总结以上是内存溢出为你收集整理的android-Umano SlidingPanel中状态栏下方的滑动布局全部内容,希望文章能够帮你解决android-Umano SlidingPanel中状态栏下方的滑动布局所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)