Giter Club home page Giter Club logo

coordinatortablayout's Introduction

CoordinatorTabLayout

License Download

中文版文档

CoordinatorTabLayout is a custom composite control that quickly implements the combination of TabLayout and CoordinatorLayout. Inherited to the CoordinatorLayout, in the following components used CollapsingToolbarLayout contains TabLayout.

show

Usage

Step 1

Add the following to your build.gradle:

dependencies {
    compile 'cn.hugeterry.coordinatortablayout:coordinatortablayout:1.2.2'
}

Step 2

Config in xml:

<cn.hugeterry.coordinatortablayout.CoordinatorTabLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinatortablayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</cn.hugeterry.coordinatortablayout.CoordinatorTabLayout>

Step 3

show
Use it in your own code:
1.setTitle(String title):Set the CoordinatorTabLayout's title.
2.setupWithViewPager(ViewPager viewPager):To link the two together.
3.setImageArray(int[] imageArray):Set the image array of the header according to the number of tabs and pass it to the control.

        //Add the fragment to the viewpager
        initFragments();
        initViewPager();
        //Image array
        mImageArray = new int[]{
                R.mipmap.bg_android,
                R.mipmap.bg_ios,
                R.mipmap.bg_js,
                R.mipmap.bg_other};

        mCoordinatorTabLayout = (CoordinatorTabLayout) findViewById(R.id.coordinatortablayout);
        mCoordinatorTabLayout.setTitle("Demo")
                .setImageArray(mImageArray)
                .setupWithViewPager(mViewPager);

Finish, enjoy it.

More

Set the content scrim

show

setImageArray(int[] imageArray, int[] colorArray):Set the color array to use for the content scrim for each tab.

        mColorArray = new int[]{
                android.R.color.holo_blue_light,
                android.R.color.holo_red_light,
                android.R.color.holo_orange_light,
                android.R.color.holo_green_light};
        mCoordinatorTabLayout.setImageArray(mImageArray, mColorArray);

Set translucent status bar

show

setTranslucentStatusBar(Activity activity):Set translucent status bar,Support android4.4 and above.

mCoordinatorTabLayout.setTranslucentStatusBar(activity);

Set translucent navigation bar

show

setTranslucentNavigationBar(Activity activity):Set translucent navigation bar,Support android4.4 and above.

mCoordinatorTabLayout.setTranslucentNavigationBar(activity);

Set back enable

setBackEnable(Boolean canBack):To enable the Up button for an activity that has a parent activity.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        mCoordinatorTabLayout.setBackEnable(true);
        ...
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }

Load header images from network

setLoadHeaderImagesListener(LoadHeaderImagesListener loadHeaderImagesListener):Set the listener that gets the header images.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        mCoordinatorTabLayout.setTitle("Demo")
                .setBackEnable(true)
                .setContentScrimColorArray(mColorArray)
                .setLoadHeaderImagesListener(new LoadHeaderImagesListener() {
                    @Override
                    public void loadHeaderImages(ImageView imageView, TabLayout.Tab tab) {
                        switch (tab.getPosition()) {
                            case 0:
                                //load header images
                                break;
                            ...
                        }
                    }
                })
                .setupWithViewPager(mViewPager);
    }

You also can load header images using glide/picasso,Sample

Set the behavior mode for the Tabs in this layout

setTabMode(@TabLayout.Mode int mode):The valid input options are:MODE_FIXED,MODE_SCROLLABLE

mCoordinatorTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

Add a CoordinatorTabLayout.OnTabSelectedListener

addOnTabSelectedListener(OnTabSelectedListener onTabSelectedListener):Add a CoordinatorTabLayout.OnTabSelectedListener that will be invoked when tab selection changes.

mCoordinatorTabLayout.addOnTabSelectedListener(new OnTabSelectedListener() {
                         @Override
                         public void onTabSelected(TabLayout.Tab tab) {

                         }

                         @Override
                         public void onTabUnselected(TabLayout.Tab tab) {

                         }

                         @Override
                         public void onTabReselected(TabLayout.Tab tab) {

                         }
                     })

Gets the child control

getActionBar():get the ActionBar
getTabLayout():get the TabLayout
getImageView():get the ImageView

More code

Attributes

  • app:contentScrim -> color.Defaults to ?attr/colorPrimary
  • app:tabIndicatorColor -> color.
  • app:tabTextColor -> color.

Demo

http://fir.im/ctlayout

LICENSE

Copyright 2017 HugeTerry.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

coordinatortablayout's People

Contributors

hugeterry 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  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

coordinatortablayout's Issues

一些建议

1、标题居中显示
2、图片下拉那个可以选择是否启用(只是一个简单的viewpager使用)
3、没有设置图片后进来颜色的设置(现在默认蓝色)

集成问题

请问报这些错该怎么才处理
java.lang.NoSuchMethodError: No virtual method addOnTabSelectedListener(Landroid/support/design/widget/TabLayout$OnTabSelectedListener;)V in class Landroid/support/design/widget/TabLayout; or its super classes (declaration of 'android.support.design.widget.TabLayout' appears in /data/app/com.zxu.myapplication1-2/base.apk)
at cn.hugeterry.coordinatortablayout.CoordinatorTabLayout.setupTabLayout(CoordinatorTabLayout.java:167)
at cn.hugeterry.coordinatortablayout.CoordinatorTabLayout.setupWithViewPager(CoordinatorTabLayout.java:224)
at com.zxu.myapplication1.MainActivity.onCreate(MainActivity.java:42)

无法在Fragment显示?

测试在Fragment中使用的时候会有xml错误 android.view.InflateException: Binary XML file line #7: Error inflating class cn.hugeterry.coordinatortablayout.CoordinatorTabLayout
难道在Fragment中需要有啥特殊处理?
Activity中倒是可以显示
请教作者!!

About status bar

Hi,

Checking out the demo, it's a full screen mode. I guess there is a question:
Are you sure it's the result by design?
Or I missed something?

Cheers

切換page時

想請教一下, 如果想讓page在每次滑動切換時, 都能讓該頁的上層圖片 完整的顯示, 應該怎麼實現?

會這樣做的原因, 是希望不要因為滑動的過程 導致上層圖片消失, 然後還必須 另外手動下拉 才能看到圖片

学习

你是怎么做到让TabLayout可见的啊,我向上滑动时TabLayout里的文字就会被覆盖..

如果tab太多怎么办

image

  • 当tab设置的太多的时候,文字就会显示不全
  • 如果有多个tab,添加的图片数组和颜色数组的大小必需和tab一致,不能共用同一颜色或者同一图片么

关于不把状态栏隐藏达到沉浸式效果的问题

你好,我看了下你的Demo,你是把状态栏隐藏起来了,这样达到了沉浸式的效果,
如果不隐藏状态栏,如何达到沉浸式效果呢?单一颜色还好说,可以直接改变状态栏的颜色,如果是图片呢,要如何做到沉浸式效果

remove temp file

Hi great work!

There is a local.properties file which should be removed from the project repos.
So it's a more gradle like engineering.

Cheers

加载高清image时会溢出内存

java.lang.OutOfMemoryError: Failed to allocate a 516789012 byte allocation with 8378560 free bytes and 246MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
at android.content.res.Resources.getDrawable(Resources.java:771)
at android.content.Context.getDrawable(Context.java:526)
at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:30)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:372)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100)
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:85)
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:92)
at cn.hugeterry.coordinatortablayout.CoordinatorTabLayout$1.onTabSelected(CoordinatorTabLayout.java:166)
at android.support.design.widget.TabLayout.dispatchTabSelected(TabLayout.java:1164)
at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1157)
at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1127)
at android.support.design.widget.TabLayout.populateFromPagerAdapter(TabLayout.java:916)
at android.support.design.widget.TabLayout.setPagerAdapter(TabLayout.java:900)
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:813)
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:774)
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:752)
at cn.hugeterry.coordinatortablayout.CoordinatorTabLayout.setupWithViewPager(CoordinatorTabLayout.java:196)
at com..*.ResultActivity.onCreate(ResultActivity.java:50)
at android.app.Activity.performCreate(Activity.java:6743)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6334)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

返回按钮点击 没响应

我是直接把这个自定义控件拉下来的 其他功能都正常 就是点击返回按钮的时候没响应 已经设置了BackEnable(true) 不知道问题在哪里

关于底部状态栏的问题

下载了你的Demo,华为荣耀手机在7.0系统下,底部状态栏颜色出现了半透明的情况,看起来极不协调。

Tab Image should collapse on fragment scroll itself.

I have a scrollview in my fragment. If the Image is still on the screen and i scroll,complete content of the that fragment doesnt appear. I think on scrolling,the image should collapse by itself.
screenshot_20180310-221646

You can see the cut at the end... that is the case.

java.lang.NoSuchMethodError---addOnTabSelectedListener

我在项目中使用你的实例代码运行,直接闪退编译器报错:java.lang.NoSuchMethodError: No virtual method addOnTabSelectedListener(Landroid/support/design/widget/TabLayout$OnTabSelectedListener;)V in class Landroid/support/design/widget/TabLayout; or its super classes (declaration of 'android.support.design.widget.TabLayout' appears in /data/app/com.QianLiu.ilovedu-V7nBu3dS_MihIsRFOxzOIQ==/split_lib_dependencies_apk.apk)
我的gradle配置如下:
buildToolsVersion = '28.0.3'

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:design:28.0.0'

我尝试改变build库的版本,没能解决,请问你这边有没有解决的思路,谢谢

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.