我一直在研究新的谷歌支持设计库.我正在努力使导航栏变得半透明,并在栏下方显示recyclerView的内容.
我正在测试5.1 nexus 5.我使用下面的项目作为测试项目.示例代码来自Chris Banes:https://github.com/chrisbanes/cheesesquare
我在下面添加了styles.xml
<item name="android:windowTranslucentNavigation">true</item>
Run Code Online (Sandbox Code Playgroud)
使导航栏半透明.
但是,我无法将CoordinatorLayout及其内容(recyclerView)显示在条形图下方.
我想要的是:
recyclerView显示在导航栏下
快速返回是存在的,当隐藏appbar时,它不应该在半透明状态栏下面.状态栏应该能够完全隐藏向上滚动的部分.
我试图layout_behavior在一个元素上设置一个子元素CollapsingToolbarLayout但是从不在iv_header视图上调用行为.当它固定在外面时,例如tv_follow视图,它可以很好地工作.
文档没有明确说明layout_behavior不能在一个AppBarLayout或那个范围内应用CollapsingToolbarLayout我因为它不工作而感到茫然.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="@dimen/full_header_height"
android:focusable="true"
android:focusableInTouchMode="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/iv_header"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:contentDescription="@null"
app:layout_behavior="com.package.view.HidingBehavior"
app:layout_collapseMode="parallax"
android:src="@drawable/profile_background"/>
<android.support.v7.widget.Toolbar
android:id="@+id/header_toolbar"
android:layout_height="@dimen/action_bar_height"
android:layout_width="match_parent"
android:background="@drawable/toolbar_dark_gradient_half"
android:gravity="top"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<TextView
android:id="@+id/tv_follow"
android:textSize="20sp"
android:textColor="@android:color/white"
android:text="@string/follow"
android:drawableLeft="@drawable/comm_follow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchor="@id/header"
app:layout_anchorGravity="center"
app:layout_behavior="com.package.view.HidingBehavior"
android:drawablePadding="8dp"
android:gravity="center"
android:visibility="gone"
android:fitsSystemWindows="true"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
行为被从设计支持库中的FloatingActionButton代码中拉出.
public class HidingBehavior extends CoordinatorLayout.Behavior<View>{ …Run Code Online (Sandbox Code Playgroud) android androiddesignsupport android-coordinatorlayout android-collapsingtoolbarlayout
由于图像总是比文字更好,我向您呈现我当前的布局.
工具栏/选项卡位于带有viewPager的activity.xml中,recyclelerView位于viewPager中的片段内.因此,您可以向右/向左滑动以查看其他内容.
我的问题是我希望AppBarLayout在其滚动行为中绑定到第一个片段中的recyclerView,而不是其他片段.
在下面的代码中,我做了这个绑定,但它不起作用,因为recyclerView无法识别外部布局中的AppBarLayout .你有解决方法吗?
活动代码:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_main"
android:layout_width="match_parent"
/* pretty stuff */
app:layout_scrollFlags="scroll|enterAlways">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/* pretty stuff */ />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/main_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.SupportFloatingActionsMenu
...>
/* Code for a fancy fab w/ menu */
</android.support.design.widget.SupportFloatingActionsMenu>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
对于包含recyclerView的片段:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.insa.burnd.view.MainActivity.NewsfeedFragment"
android:id="@+id/fragment_newsfeed">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout> …Run Code Online (Sandbox Code Playgroud) android android-fragments androiddesignsupport android-appbarlayout
我遇到了AlertDialog的问题.这些按钮不再使用accentColor来设置按钮文本颜色.
我正在使用最新的支持库v24.2.1.我通过以下方式在styles.xml中设置对话框的样式:
<style name="Base.Theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:alertDialogTheme">@style/Widget.DialogStyle</item>
<item name="alertDialogTheme">@style/Widget.DialogStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)
并且Widget.DialogStyle看起来像这样:
<style name="Widget.DialogStyle" parent="@style/Theme.AppCompat.Light.Dialog.Alert">
<item name="android:colorAccent" tools:targetApi="lollipop">@color/primaryColor</item>
<item name="colorAccent">@color/primaryColor</item>
<item name="android:textColorPrimary">@color/primaryText</item>
<item name="android:textColor">@color/primaryText</item>
<item name="android:background">@color/backgroundColor</item>
<item name="android:textAppearanceLarge">@color/primaryText</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在app API低于24时,对话框按钮用colorAccent着色,但在API 24上,这不再是行为(文本是黑色,应该是橙色).请参阅以下屏幕截图.
有没有人知道如何让按钮上的accentColor?谢谢.
android android-layout android-alertdialog android-support-library androiddesignsupport
在设计支持库(V 22.2.0)中,我在设置CollapsingToolbarLayout 的expandedTitleTextAppearance和collapsedTitleTextAppearance属性时遇到问题.
例如,如果我这样设置:
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleTextAppearance="@style/TransparentText"
>
Run Code Online (Sandbox Code Playgroud)
和样式看起来像这样:
<style name="TransparentText">
<item name="android:textColor">#00000000</item>
</style>
<style name="GreyText">
<item name="android:textColor">#666666</item>
</style>
Run Code Online (Sandbox Code Playgroud)
文本没有显示但是当我尝试在工具栏折叠后展开工具栏时,应用程序将在Android 4.1上崩溃.
如果我把它设置为:
app:expandedTitleTextAppearance="@style/TransparentText"
app:collapsedTitleTextAppearance="@style/GreyText"
Run Code Online (Sandbox Code Playgroud)
它不再崩溃,但文本在崩溃时不会显示.
在启用proguard的情况下,这段简单的代码将无法正常工作:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/show"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginTop="40dp"
android:text="Show snackbar" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
android:src="@drawable/ic_save_white_24dp"
app:layout_anchorGravity="bottom|right|end" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
期望的行为FloatingActionButton在显示SnackBar时已被推翻,但直到我禁用proguard才会发生.
没有教程也涵盖了这一点,因为新项目默认禁用了proguard;)
有人知道设计支持库的proguard配置吗?
android android-snackbar androiddesignsupport android-coordinatorlayout
我有一个在CoordinatorLayout中托管的垂直RecyclerView,具有折叠工具栏布局.此RecyclerView的ViewHolder包含另一个带有GridLayoutManager的RecyclerView.
这种嵌套的原因是内部RecyclerView显示的图片集合可以包含1-20张图片.我不知道会有多少张图片,但Grid的跨度必须始终为3.每次绑定ViewHolder时,我都会调整RecyclerView的布局参数以容纳内容.
如果没有CollapsingToolBarLayout,这很有效.但是,如果有一个折叠的工具栏,用我的手指在内部RecyclerView上滚动不会滚动折叠工具栏,但滚动另一个项目却会.
要重新强调,在绑定的ViewHolder中,如果我开始滚动除嵌套的RecyclerView之外的任何其他项目,滚动工作正常.但是,如果我在嵌套的RecyclerView上开始滚动,那么它会中断.
是否可以阻止内部RecyclerView上的滚动拦截,只允许父滚动?我希望内部的RecyclerView仍能处理点击.
以下是该现象的YouTube链接:https://youtu.be/fzj7HmqskzU
以下是父RecyclerView的XML:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivityFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp"
app:contentScrim="?attr/colorPrimary"
app:layout_collapseParallaxMultiplier="0.7"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<View
android:id="@+id/header_view"
android:layout_width="match_parent"
android:layout_height="192dp"
android:animateLayoutChanges="true"
android:background="@color/primary" />
<android.support.v7.widget.Toolbar
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/abc_action_bar_default_height_material"
android:elevation="4dp"
app:layout_collapseMode="pin"
app:popupTheme="@style/Theme.AppCompat.NoActionBar"
app:theme="@style/Theme.AppCompat.NoActionBar" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)
这是托管嵌套RecyclerView的主要ViewHolder:
public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.ViewHolder> {
private static final int MODEL_OBJECT = 1;
private List<ModelObject> modelObjects;
private Context context;
private int imageSize;
public SimpleAdapter(List<ModelObject> modelObjects) …Run Code Online (Sandbox Code Playgroud) android-recyclerview androiddesignsupport android-collapsingtoolbarlayout android-appbarlayout
当我预先填充EditText字段时,我希望能够将浮动标签放在适当的位置.加载视图时,在将文本设置为浮动标签之前,提示仍会显示在文本后面.在支持库的TextInputLayout中似乎没有这方法.有什么想法吗?
android android-support-library android-design-library androiddesignsupport android-textinputlayout
我正在关注从设计支持库实现navigationView的教程,我无法摆脱下面的错误.我已经阅读了本网站上发布的其他解决方案,但没有一个能为我工作,请帮忙.
Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class android.support.design.widget.NavigationView
Run Code Online (Sandbox Code Playgroud)
activity_main.xml中
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/tool_bar"
layout="@layout/tool_bar" />
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
MainActiviy.java
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//Defining Variables
private Toolbar toolbar;
private NavigationView …Run Code Online (Sandbox Code Playgroud) java android material-design navigationview androiddesignsupport
背景如何变暗,就像它在这里显示的一样?
我通常使用CoordinatorLayout和设置它BottomSheetBehavior.
android androiddesignsupport android-coordinatorlayout bottom-sheet