Git Product home page Git Product logo

multiline-collapsingtoolbar's Introduction

multiline-collapsingtoolbar Download

multiline-collapsingtoolbar is a replacement for CollapsingToolbarLayout from the Android Design Support Library which can deal with multiline titles (with a customizable maximum number of lines) in the expanded state. When collapsing the toolbar, the lower lines of the title fade away to leave only the top line visible.

Information about compatibility with AndroidX

We are currently not planning to update this library for support of the Android Support Library version 28 or the new AndroidX libraries, as has been discussed in #62 and other places. Instead, we are trying to get our modifications merged into the official Material Components Android library. Please see the PR for more details.

Example

Here you can see the library in action in the included demo app:

Demo image

Installation

If you are using Gradle and the JCenter Maven Repository, installing the library is as simple as adding a new dependency statement.

dependencies {
    compile 'net.opacapp:multiline-collapsingtoolbar:27.1.1'
}

The current version 27.1.1 of the library is based on the code and tested with the Design Support Library version 27.1.1. We'll try to keep up to date with new support library versions as soon as possible, but please do not expect this library to run with support versions other than that.

Usage

The library's public API is nearly identical to the version from the support library, so you can use it as a drop-in replacement. We only added a maxLines attribute and corresponding getter and setter functions to the CollapsingToolbarLayout to make it possible to change the maximum number of lines, which is set to 3 by default.

As the Design Support Library, it should be compatible with API 14 (Android 4.0) and above.

XML layout example:

<android.support.design.widget.AppBarLayout
        android:layout_height="192dp"
        android:layout_width="match_parent">
    <net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:maxLines="3">
        <android.support.v7.widget.Toolbar
                android:layout_height="?attr/actionBarSize"
                android:layout_width="match_parent"
                app:layout_collapseMode="pin"/>
    </net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

You can find a simple demo application in the demo module.

Implementation details

Most of the code is copied from the original Support Library classes, the only changes (apart from the package name, imports and automatic code reformatting) are in the CollapsingTextHelper and CollapsingToolbarLayout classes. The changes there are marked with comments.

Contributing

This library is probably not complete and might contain bugs that only occur in constellations we did not yet test. Please do not hesitate to create an issue on GitHub for any problems that cross your way. Please understand that we cannot afford to spend time fixing problems that do not affect our products, but we'll be happy to merge pull requests if you or someone else is able to improve this library.

If you get stuck anywhere in the process, please do not hestitate to ask us anytime at [email protected].

Please note that we have a Code of Conduct in place that applies to all project-related communication.

Contributors

multiline-collapsingtoolbar's People

Contributors

giljulio avatar jfri avatar johan12345 avatar jsotuyod avatar raphaelm avatar simonschubert avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

multiline-collapsingtoolbar's Issues

Scrim color doesn't persist

Hi, thanks for this great lib,

I just had an issue when using it. When the toolbar is collapsed, the color doesn't change to the scrim color. It just "blinks" one time, and then remains transparent.

Have you experienced this behavior ?

Android 4.4: Transition Title does not update

Hi,
firstly, thanks for you great work. Unfortunately I ran into an issue using your library on an Android 4.4 device (the issue does not occure on 5.0 or higher). The title of the CollapsingToolbarLayout is updated multiple times during the lifetime of the layout. While the expanded and collapsed title change accordingly the title that is displayed during the transition is always the first ever set.

So here's an example:
Expanded Title: This is my long title
Transition Title (while scrolling up or down): This is my long title
Collapsed Title: This is my long title

Than I want to set another title (happens on update of the fragment)
Expanded Title: My other title is also nice
Transition Title: This is my long title
Collapsed Title: My other title is also nice

See the attached image. The title that was first set ("U11-Mannschaft des SV Reutte...") shows up during the transition of the current title ("Kürzlich wurde im Beisein zahlreicher Ehrengäste...").
bug

Thanks in advance.

Repeated Text

Hi,

When I try and use the library with a long string, it wraps correctly when fully expanded. However, when it starts collapsing and the text is moved to one line, it still overlaps.

For instance, the String "Lorem Ipsum: Lorem Ipsum Lorem Ipsum Lorem Ipsum", will firstly display as: -

Lorem Ipsum:
Lorem Ipsum
Lorem Ipsum
Lorem Ipsum

If I drag down, not quite collapsed, I can see :-

Lorem Ipsum: Lorem Ipsum Lorem Ipsum Lorem Ipsum
Lorem Ipsum
Lorem Ipsum

Is this meant to be the case? I.e. when the text has now moved up a line, should it be removed from below?

Thanks

Jack

Update to support library 24.0.0

Since the last update, multiple new versions of the Support Library have been released (up to 23.4.0). We should check if there were any changes to the classes we copied into this library and update those accordingly in addition to setting the dependency to the newest version in the build.gradle file.

However, it seems like the git repository at https://github.com/android/platform_frameworks_support is not updated yet. So we probably need to use the source code downloaded from the Android SDK manager for this.

label and resizing in style on Adnroid 6.0

The litle of label appears when my CollapsingToolbarLayout part is collapsed(This state appears on android ver 6 devices). On the older version layout works perfect. After research I think that it may be the style fault, but how can I adjust the proper style with diffrent version, to make the layout indentical on every device?

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/green</item>
        <item name="colorPrimaryDark">@color/red</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

Android 4.4.2 (correct layout)
15492431_1160267690721445_7874839374166280398_n.jpg
Android 6.0 (label)
15419478_1160261287388752_1896429285_o (1).png

Affecting another native colapsing toolbar

when I also used native colapsing toolbar seems it affected by this library (colapsing text appearance hidden) so i must set for appearance on each native Colapsing toolbar.

Link versions to support library dependency version

For example:

if multiline-collapsingtoolbar depends support lib version 27.x.x then version the library to 27.[0...9].[0...9]

This will make it clearer what multiline-collapsingtoolbar version depends on which support library version

Add subtitles

Hi,
It would be great if the library also provided a possibility to add a subtitle to the toolbar. The subtitle would show below the title even in collapsed mode.

This functionality is implemented e.g. in this library (which doesn't support multiline titles).

You need to use a Theme.AppCompat theme (or descendant) with the design library

Samsung S3, API 19 (4.4.4)

Grade
compile 'net.opacapp:multiline-collapsingtoolbar:1.2.0'

my style :

<style name="PlanningTheme" parent="Theme.AppCompat">
   <item name="windowActionBarOverlay">true</item>
   <item name="windowActionBar">false</item>
   <item name="windowNoTitle">true</item>
  <item name="colorPrimary">@color/main_blue</item>
  <item name="android:textColor">@color/white</item>
  <item name="colorControlNormal">@color/white</item>
</style>

Manifest:

<activity
     android:name=".phone.PlanningActivity" 
     android:screenOrientation="portrait"
     android:theme="@style/PlanningTheme"
     android:windowSoftInputMode="adjustPan"/>

Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library. at net.opacapp.multilinecollapsingtoolbar.ThemeUtils.checkAppCompatTheme(ThemeUtils.java:36) at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.<init>(CollapsingToolbarLayout.java:142) at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.<init>(CollapsingToolbarLayout.java:136) at java.lang.reflect.Constructor.constructNative(Native Method)  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)  at android.view.LayoutInflater.createView(LayoutInflater.java:600)  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)  at android.view.LayoutInflater.inflate(LayoutInflater.java:498)  at android.view.LayoutInflater.inflate(LayoutInflater.java:398)  at android.view.LayoutInflater.inflate(LayoutInflater.java:354)  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)  at com.swapcard.apps.android.phone.ScheduleDetailActivity.onCreate(ScheduleDetailActivity.java:108)  at android.app.Activity.performCreate(Activity.java:5582)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2405)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)  at android.app.ActivityThread.access$900(ActivityThread.java:171)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:146)  at android.app.ActivityThread.main(ActivityThread.java:5679)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)

How to set the Title by code

Hi, thank you for you library

Im trying to set the Title by code using this method

final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
        collapsingToolbarLayout.setTitle(title);

But im getting this error

ClassCastException: net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout cannot be cast to android.support.design.widget.CollapsingToolbarLayout

I also tried MultilineCollapsingToolbarLayoutbut that doesnt work

How do i access multilinecollapsingtoolbar.CollapsingToolbarLayout to set the Title by code?

Thanks

wrap_content of AppBarLayout

How do we can wrap_content content based on the length of title string rather not setting the fix AppBarLayout layout_height.

app:maxLines="x" here value x also not fix;

adding image to header

Hello,

I cudnt find how to add an image to header, when i try,

`<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"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="192dp"
    android:theme="@style/AppTheme.AppBarOverlay"
    android:background="?attr/colorPrimary"
    android:fitsSystemWindows="true">

    <net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:title="sdfsdf">

        <ImageView
            android:id="@+id/cover_image"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:background="@color/white"
            android:fitsSystemWindows="true"
            android:scaleType="fitXY"
            android:src="@drawable/lcw"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:layout_collapseMode="pin"/>

    </net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<com.github.ksoichiro.android.observablescrollview.ObservableScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:text="@string/lipsum" />

</com.github.ksoichiro.android.observablescrollview.ObservableScrollView>

</android.support.design.widget.CoordinatorLayout>`

results,

http://i.imgur.com/7y9Ztsj.png

and with NestedScrollView

`<android.support.v4.widget.NestedScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:text="@string/lipsum" />

</android.support.v4.widget.NestedScrollView>`

http://i.imgur.com/DJpkNJH.png
http://i.imgur.com/EsPhZTE.png

Text get duplicated if it's not in English

When using a no English text title the multi lines works but the text get duplicated in the first line like the image show and it back to normal when it is collapsed

screenshot_20170427-202937

Update library to Support Library version 27.1.1

https://developer.android.com/topic/libraries/support-library/revisions.html

The new Support Library version 27.1.1 is just out

Changes:

  • AsyncListDiffer doesn't call getChangePayload (AOSP issue 73961809)
  • Fragment ViewModel's onCleared not called (AOSP issue 74139250)
  • RecyclerView.setRecycledViewPool() increases attachCount even when adapter is null
  • RecyclerView NPE if SmoothScroller.onStop calling stop() or startSmoothScroller()
  • Fragment Replacement transaction causes previous fragment to flicker after new fragment is shown (AOSP issue 74051124)
  • Loader callback breaking change in 27.1.0 (AOSP issue 74135998)
  • RTL layout does not work when the vertical grid view set column >1
  • onLoadFinished called multiple times in ViewPager with FragmentPagerAdapter
  • AsyncListDiffer should dispatch updates after setting current list (AOSP issue 74003309)
  • ShareActionProvider throws ClassCastException in 27.1.0
  • Fragment lifecycle change with ViewPager (AOSP issue 73976255)

Make it clearer which parts are from the original library

@johan12345, not only out of curiosity, but mostly to make this library easier to maintain with future versions of the support library -- could you think of a way to make it more clear which parts of the code are created by you and which are from Android? I could think of a suitalble subclassing pattern or simple clear comments inside the code.

Expanded Title line spacing

How to set the line spacing(like lineSpacingExtra or lineSpacingMultiplier) of expanded title? I am a new to Android and the project is too complex for me......So i did not find the answer

thanks a lot.

Rendering problem with Android Studio in preview

 Rendering Problems
The following classes could not be instantiated:
- net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout (Open Class, Show Exception, Clear Cache)
Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE.
If this is an unexpected error you can also try to build the project, then manually refresh the layout.
Exception Details
android.content.res.Resources$NotFoundException
at com.android.layoutlib.bridge.android.BridgeContext.obtainStyledAttributes(BridgeContext.java:656)
at android.content.res.Resources_Theme_Delegate.obtainStyledAttributes(Resources_Theme_Delegate.java:71)
at android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java:1436)
at android.content.Context.obtainStyledAttributes(Context.java:587)
at net.opacapp.multilinecollapsingtoolbar.CollapsingTextHelper.setExpandedTextAppearance(CollapsingTextHelper.java:241)
at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.(CollapsingToolbarLayout.java:185)
at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.(CollapsingToolbarLayout.java:136)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:465)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:172)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:186)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:334)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:345)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:245)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:834)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:861)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:834)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:324)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:429)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:389)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:548)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:533)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:966)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:533)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$72(RenderTask.java:659)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Problem with import

hey huys im using android studio RC 2.2 and im having troubles importing the toolbar

i already put the correct toolbar on the xml but when i try to import the packege on the activity everything goes red and i can import nothing else

How to use this library using setTitle

Im trying to use yours library, but I need to set the tittle dynamiclly. Is there a way to do it?

CollapsingToolbarLayout mCollapsingToolbarLayout=(CollapsingToolbarLayout) findViewById(R.id.collapsing);
        mCollapsingToolbarLayout.setTitle(s);

That lines make a ClassCastException of course.

In your demo file you setup the tittle by paramter aapp:title="@string/title", but as far as I know @string values are immutable

Failed to resolve: net.opacapp:multiline-collapsingtoolbar:1.6.0

Hi everyone,
I tried adding the multiline-collapsingtoolbar to my android studio project but somehow it doesn't work. I always get the folloging error:

Failed to resolve: net.opacapp:multiline-collapsingtoolbar:1.6.0

I already tried everything that is suggested to fix this problem on the internet...but without any success. Does it maybe have to do with a specific gradle version or other dependency versions? Please help me!

Text Shadow Visibility on some text

screen shot 2016-11-28 at 11 31 38 am
I have added text shadow on expanded text everything is working perfect but you can see the shadow of word urdu on background is not adjusted automatically..
code for style:

<style name="expTitle">
        <item name="android:shadowColor">@color/shadow_text_shadow</item>
        <item name="android:shadowDx">2</item>
        <item name="android:shadowDy">2</item>
        <item name="android:shadowRadius">1</item>
        <item name="android:textSize">23sp</item>
        <item name="android:textColor">@color/white</item>
</style>

Code in activity XML

<android.support.design.widget.AppBarLayout
        android:id="@+id/mainappbar"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:fitsSystemWindows="true">

<net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout
            android:id="@+id/maincollapsing"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleGravity="center|bottom"
            app:expandedTitleMarginBottom="?attr/actionBarSize"
            app:expandedTitleTextAppearance="@style/expTitle"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:statusBarScrim="@android:color/transparent"
            app:titleEnabled="true"

            >.....

expandedTitleGravity / collapsedTitleGravity limited

Hi,

The only attributes of expandedTitleGravity which I tested and that work are center_vertical, bottom and top. Using this library I was unable to center text horizontally when toolbar was expanded or collapsed.

I guess transition from centered multiline text to single left/right aligned line might be difficult to implement but it would certainly be welcomed feature.

Crashes with Design Support Library v25.0.0

After updating to the newest support libraries, an app I use Multiline-Collapsingtoolbar in, crashes.
Attached, you can find a stack trace. I replaced all “personal“ package names by “foo bar baz” but otherwise left everything as-is.

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{foo.bar.baz/foo.bar.baz.DetailActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

Caused by android.view.InflateException: Binary XML file line #16: Error inflating class net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout at android.view.LayoutInflater.createView(LayoutInflater.java:640) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.parseInclude(LayoutInflater.java:933) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:511) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at android.view.LayoutInflater.inflate(LayoutInflater.java:366) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(SourceFile:284) at android.support.v7.app.AppCompatActivity.setContentView(SourceFile:143) at foo.bar.baz.base.ToolbarActivity.onCreate(SourceFile:95) at foo.bar.baz.base.DetailActivity.onCreate(SourceFile:52) at foo.bar.baz.DetailActivity.onCreate(SourceFile:61) at android.app.Activity.performCreate(Activity.java:6289) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

Caused by java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance(Constructor.java) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:614) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.parseInclude(LayoutInflater.java:933) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:511) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at android.view.LayoutInflater.inflate(LayoutInflater.java:366) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(SourceFile:284) at android.support.v7.app.AppCompatActivity.setContentView(SourceFile:143) at foo.bar.baz.base.ToolbarActivity.onCreate(SourceFile:95) at foo.bar.baz.base.DetailActivity.onCreate(SourceFile:52) at foo.bar.baz.DetailActivity.onCreate(SourceFile:61) at android.app.Activity.performCreate(Activity.java:6289) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

Caused by java.lang.NumberFormatException: Invalid int: "res/color/abc_hint_foreground_material_light.xml" at java.lang.Integer.invalidInt(Integer.java:138) at java.lang.Integer.parse(Integer.java:410) at java.lang.Integer.parseInt(Integer.java:367) at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:128) at android.content.res.TypedArray.getInt(TypedArray.java:324) at net.opacapp.multilinecollapsingtoolbar.CollapsingTextHelper.setExpandedTextAppearance(SourceFile:253) at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.(SourceFile:185) at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.(SourceFile:136) at java.lang.reflect.Constructor.newInstance(Constructor.java) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:614) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.parseInclude(LayoutInflater.java:933) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:511) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at android.view.LayoutInflater.inflate(LayoutInflater.java:366) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(SourceFile:284) at android.support.v7.app.AppCompatActivity.setContentView(SourceFile:143) at foo.bar.baz.base.ToolbarActivity.onCreate(SourceFile:95) at foo.bar.baz.base.DetailActivity.onCreate(SourceFile:52) at foo.bar.baz.DetailActivity.onCreate(SourceFile:61) at android.app.Activity.performCreate(Activity.java:6289) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

When setting AppCompat and the Design Support Library to version 24.2.1 instead of 25.0.0, the crash doesn’t occur.

New line without the need

Thank you very much for the library!
I have a question - why is a new line created in Title (the third)?
Visually, the header could fit into 2 lines.
screenshot_2

My xml insert:
<net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimaryDark" app:expandedTitleGravity="bottom" app:expandedTitleMarginBottom="0dp" app:expandedTitleMarginStart="16dp" app:expandedTitleTextAppearance="@style/collapsingTitle" app:maxLines="3" app:expandedTitleMarginEnd="0dp" app:layout_scrollFlags="scroll|exitUntilCollapsed">

How to fix Toolbar Background color?

<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="300dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true"
>
<net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:maxLines="3">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:contentInsetStart="0dp"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin"
>
</android.support.v7.widget.Toolbar>
</net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

Using it like this and it is resulting in the image part as the background of Toolbar. How to set a specific background for toolbar

Can't link to library from my project

I get a connection refused from Android studio when trying to import de the project in my build.gradle. do you know where it can comes from ? thanks

OutOfMemory issue

Hey,
I'm facing this issue while I'm using the library on some devices
Any help with this,
Thanks

Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 3499212 byte allocation with 643850 free bytes and 628KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java) at android.graphics.Bitmap.nativeCreate(Bitmap.java) at android.graphics.Bitmap.createBitmap(Bitmap.java:939) at android.graphics.Bitmap.createBitmap(Bitmap.java:912) at android.graphics.Bitmap.createBitmap(Bitmap.java:879) at android.graphics.drawable.VectorDrawable$VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:711) at android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:278) at android.graphics.drawable.TransitionDrawable.draw(TransitionDrawable.java:209) at android.widget.ImageView.onDraw(ImageView.java:1169) at android.view.View.draw(View.java:16180) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.draw(View.java:16183) at android.support.v4.view.ViewPager.draw(ViewPager.java:2443) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.draw(View.java:16183) at android.widget.FrameLayout.draw(FrameLayout.java:592) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.drawChild(CollapsingToolbarLayout.java:342) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.draw(View.java:16183) at android.widget.FrameLayout.draw(FrameLayout.java:592) at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.draw(CollapsingToolbarLayout.java:310) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1223) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.draw(View.java:16183) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.draw(View.java:16183) at android.widget.FrameLayout.draw(FrameLayout.java:592) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.updateDisplayListIfDirty(View.java:15098) at android.view.View.getDisplayList(View.java:15126) at android.view.View.draw(View.java:15901) at android.view.ViewGroup.drawChild(ViewGroup.java:3703) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497) at android.view.View.draw(View.java:16183) at android.widget.FrameLayout.draw(FrameLayout.java:592) at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2923) at android.view.View.updateDisplayListIfDirty(View.java:15103) at android.view.View.getDisplayList(View.java:15126) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:275) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:281) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:320) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2751) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2584) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2176) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777) at android.view.Choreographer.doCallbacks(Choreographer.java:590) at android.view.Choreographer.doFrame(Choreographer.java:560) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5938) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

Error

ive got error with this :
net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout cannot be cast to android.support.design.widget.CollapsingToolbarLayout

crash-CollapsingTextHelper#calculateUsingTextSize

Fatal Exception: java.lang.IllegalArgumentException: Layout: -9 < 0
at android.text.Layout.(Layout.java:182)
at android.text.StaticLayout.(StaticLayout.java:478)
at android.text.StaticLayout.(StaticLayout.java:464)
at android.text.StaticLayout.(StaticLayout.java:442)
at android.text.StaticLayout.(StaticLayout.java:422)
at net.opacapp.multilinecollapsingtoolbar.CollapsingTextHelper.calculateUsingTextSize(TbsSdkJava:742)
at net.opacapp.multilinecollapsingtoolbar.CollapsingTextHelper.calculateBaseOffsets(TbsSdkJava:462)
at net.opacapp.multilinecollapsingtoolbar.CollapsingTextHelper.recalculate(TbsSdkJava:877)
at net.opacapp.multilinecollapsingtoolbar.CollapsingToolbarLayout.onLayout(TbsSdkJava:537)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1757)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.support.design.widget.AppBarLayout.onLayout(TbsSdkJava:240)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.support.design.widget.CoordinatorLayout.layoutChild(TbsSdkJava:1191)
at android.support.design.widget.CoordinatorLayout.onLayoutChild(TbsSdkJava:876)
at android.support.design.widget.ViewOffsetBehavior.layoutChild(TbsSdkJava:63)
at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(TbsSdkJava:42)
at android.support.design.widget.AppBarLayout$Behavior.onLayoutChild(TbsSdkJava:1021)
at android.support.design.widget.AppBarLayout$Behavior.onLayoutChild(TbsSdkJava:787)
at android.support.design.widget.CoordinatorLayout.onLayout(TbsSdkJava:894)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1757)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1757)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1757)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:766)
at android.view.View.layout(View.java:17829)
at android.view.ViewGroup.layout(ViewGroup.java:5851)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2675)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2345)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1490)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7036)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:878)
at android.view.Choreographer.doCallbacks(Choreographer.java:690)
at android.view.Choreographer.doFrame(Choreographer.java:625)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:864)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:185)
at android.app.ActivityThread.main(ActivityThread.java:6615)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:916)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:806)

TitleTextColor not correctly set

setCollapsedTitleTextColor and setExpandedTitleColor seems to not show the title with alpha. I tested the original CollapsingToolbarLayout and it works as expected.

It seems to jump to white/black or the closest opaque color. I plan on digging deeper into this tomorrow.

Revert to single line when changing title text size with TextAppearance

When I add this line to the view in xml:

app:expandedTitleTextAppearance="@style/MultilineCollapsingToolbar"

where the style is

<style name="MultilineCollapsingToolbar">
    <item name="android:textSize">@dimen/text_caption</item>
    <item name="android:textColor">?android:textColorPrimary</item>
</style>

, then I loose the multi line title and it reverts back to the ellipsis character. Is there an other way to set the title text size?

Align background with expanded text

How can I add a background shape/color and align it with the expanded title like so?
screenshot_1491245756
The goal is that the background expands/shrinks with the title.

Multiple items in the options menu shorten the text width

Once there is a certain amount of items in the options menu, the toolbar text width decreases. On a 1080p xxhdpi phone, more than two items lead to a massive shortage, depending on the text of course.

Attached, you will find screenshots taken with the demo app running and the following changes introduced.

To reproduce, paste the following into menu_demo.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_settings0"
        android:icon="@android:drawable/btn_star"
        android:title="@string/settings"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_settings1"
        android:icon="@android:drawable/btn_star"
        android:title="@string/settings"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_settings2"
        android:icon="@android:drawable/btn_star"
        android:title="@string/settings"
        app:showAsAction="ifRoom" />

</menu>

Zero items:

zero_items

One item:

one_item

Two items:

two_items

Three items:

three_items

Four items:

four_items

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.