12個のMaterial Designスタイルコントロールの使用


GitHub上のプロジェクトのアドレス:
https://github.com/Hebin320/MaterialDesignUse
CSDN上のダウンロードアドレス
http://download.csdn.net/detail/hebin320320/9658215
1、AppBarLayout、ToolBar
AppBarLayoutはLinerLayoutが実装したViewGroupコンテナコンポーネントを継承し、Material Designのために設計されたApp Barであり、ジェスチャースライド操作をサポートしています.AppBarLayoutはToolbarの親レイアウトコンテナとして使用する必要があり、CoordinatorLayoutと組み合わせて使用することもできます.ToolBarは、Googleが新しく発売したActionBarに代わるタイトルバーコントロールで、背景をステータスバーに広げることができ、依存パッケージはv 7で、使用する前にstyleで継承したテーマをNoActionBarに変更します.「タイトル」、「サブタイトル」、「ロゴ」、「NavigationIcon」および「Menuメニュー」を設定したり、レイアウトをカスタマイズしたりすることができます.
.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    .support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_collapseMode="pin"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:fitsSystemWindows="true"
        >
        "@+id/toolbar_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="0dp"
            android:layout_marginStart="0dp"
            android:gravity="center"
            android:text="@string/app_name"
            android:textColor="#FFFFFF"
            android:textSize="20sp"
            android:paddingTop="6dp"
            android:paddingRight="40dp"
            />
    .support.v7.widget.Toolbar>
.support.design.widget.AppBarLayout>

TextViewは中位のタイトルで、fitsystemWindows実装ステータスバー各バージョン適合案:1.Android 5.0以上:material designスタイル、半透明(アプリの内容がステータスに引き上げられない)2.Android 4.4(kitkat)以上5.0:全透明(アプリの内容がステータスに引き上げられない)3.Android 4.4(kitkat)以下:status barを占有せずにActivityにコードを追加すればToolBarを使用できます.
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        tvToolTitle = (TextView) findViewById(R.id.toolbar_title);
        tvToolTitle.setText("  ");
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

这里写图片描述
ToolBarのメニューレイアウト:
<menu 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"  
    tools:context=".MainActivity" >   
    <item  
        android:id="@+id/action_settings"  
        android:orderInCategory="100"  
        android:title="action_settings"  
        app:showAsAction="never"/>  

menu>  
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {  
    @Override  
    public boolean onMenuItemClick(MenuItem item) {  
        switch (item.getItemId()) {  
        case R.id.action_settings:  
            break;  
        default:  
            break;  
        }  
        return true;  
    }  
});  

2、DrawerLayout、NavigationView
DrawerLayoutは引き出し効果を簡単に実現できます.DrawerLayoutでは、1番目の子Viewはコンテンツを表示するviewでなければなりません.2番目のviewは引き出しviewで、プロパティlayout_を設定します.gravity="left|right"は、左から出るか右から出るかを表します.使用前に追加する必要があります:
compile 'com.android.support:design:23.3.0'

xmlのレイアウトコードは次のとおりです.
"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:orientation="vertical">


    .support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        .support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="70dp"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            android:fitsSystemWindows="true"
            >
            "@+id/toolbar_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="0dp"
                android:layout_marginStart="0dp"
                android:gravity="center"
                android:text="@string/app_name"
                android:textColor="#FFFFFF"
                android:textSize="20sp"
                android:paddingTop="6dp"
                android:paddingRight="40dp"
                />
        .support.v7.widget.Toolbar>
    .support.design.widget.AppBarLayout>


    .support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        
        .support.design.widget.CoordinatorLayout
            android:id="@+id/main_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            "@+id/frame_content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/appbar"
                android:scrollbars="none"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />
        .support.design.widget.CoordinatorLayout>


        
        .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/navigation_header"
            app:menu="@menu/drawer" />

    .support.v4.widget.DrawerLayout>


1つ目のレイアウトはFramelayoutを使用しており、引き出しバーのクリックで異なるFragmentを表示することができます.引き出しレイアウトはNavigationViewで、NavigationViewはいくつかの必要なパラメータ、1つのヘッダを表示するレイアウト、およびオプションを表示するためのメニューレイアウトを受信する必要があります.xmlにレイアウトを直接追加できます.
     app:headerLayout="@layout/navigation_header"
     app:menu="@menu/drawer"

ヘッダレイアウトxmlコード:
<LinearLayout 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="192dp"
    android:background="?attr/colorPrimaryDark"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="16dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">


    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/profile_image"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:layout_marginTop="20dp"
        android:src="@mipmap/ic_launcher"
        app:border_color="@color/primary_light"
        app:border_width="2dp" />


    <TextView
        android:layout_marginTop="10dp"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="    "
        android:gravity="center"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
         />

LinearLayout>

オプションメニューのレイアウト:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/navigation_item_book"
            android:icon="@mipmap/ic_stars_black_24dp"
            android:title="  " />
        <item
            android:id="@+id/navigation_item_example"
            android:icon="@mipmap/ic_brightness_7_black_24dp"
            android:title="  " />
        <item
            android:id="@+id/navigation_item_blog"
            android:icon="@mipmap/ic_flare_black_24dp"
            android:title="  " />

        <item
            android:id="@+id/navigation_item_about"
            android:icon="@drawable/ic_favorite"
            android:title="  " />
    group>
menu>

ToolBarに合わせてActivityでの使用コード:
public class MainActivity extends AppCompatActivity implements BackHandledFragment.BackHandlerInterface {

    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToggle;
    private Toolbar mToolbar;
    private BackHandledFragment selectedFragment;
    private NavigationView mNavigationView;
    private TextView tvToolTitle;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        tvToolTitle = (TextView) findViewById(R.id.toolbar_title);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open,
                R.string.drawer_close);
        mDrawerToggle.syncState();
        mDrawerLayout.addDrawerListener(mDrawerToggle);
        mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
        setupDrawerContent(mNavigationView);
        switchToBook();

    }


    private void switchToBook() {
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_content, new RecyclerFragment()).commit();
        tvToolTitle.setText("  ");
    }

    private void switchToExample() {
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_content, new DayFragment()).commit();
        tvToolTitle.setText("  ");
    }

    private void switchToBlog() {
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_content, new BlankFragment()).commit();
        tvToolTitle.setText("  ");
    }

    private void switchToAbout() {
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_content, new TimeFragment()).commit();
        tvToolTitle.setText("  ");
    }


    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        switch (menuItem.getItemId()) {

                            case R.id.navigation_item_book:
                                switchToBook();
                                break;
                            case R.id.navigation_item_example:
                                switchToExample();
                                break;
                            case R.id.navigation_item_blog:
                                switchToBlog();
                                break;
                            case R.id.navigation_item_about:
                                switchToAbout();
                                break;

                        }
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
    }



    @Override
    public void setSelectedFragment(BackHandledFragment backHandledFragment) {
        this.selectedFragment = backHandledFragment;
    }


    private long exitTime = 0;

    public void doExitApp() {
        if ((System.currentTimeMillis() - exitTime) > 2000) {
            Toast.makeText(this, R.string.press_again_exit_app, Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
        }
    }

    @Override
    public void onBackPressed() {
        if (selectedFragment == null || !selectedFragment.onBackPressed()) {
            if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                mDrawerLayout.closeDrawer(Gravity.LEFT);
            } else {
                doExitApp();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.test,menu);
        return true;
    }
}

3、RecyclerView、CardView、AutoScrollViewPager
RecyclerViewは大量のデータを表示するためのコントロールで、ListView、GirdViewと少し似ています.それに比べて、RecyclerViewは柔軟性、体験感の面で大きな向上を遂げています.提供する異なるLayoutManagerを設定することで、ItemDecoration、ItemAnimatorは豊富な機能を実現することができます.依存パッケージはv 7です.RecyclerViewはListViewのようにHeaderやFooterを追加したりaddOnScrollListenerでページングロードしたりすることもできます.RecyclerviewにViewpagerをHeaderとして追加した例では、Recyclerviewを簡単に使用し、ViewpagerはGitHub上のオープンソースプロジェクトを使用し、自動マルチキャストを実現するAutoScrollViewPagerを使用しています.GitHubアドレスは次のとおりです.
https://github.com/Trinea/android-auto-scroll-view-pager

HeaderはGitHub上のオープンソースプロジェクトRecyclerViewHeaderを通じて、RecyclerviewにHeaderを迅速に追加します.GitHubアドレスは次のとおりです.
https://github.com/blipinsk/RecyclerViewHeader

依存パッケージを追加した後で適用できます.fragment_recyclerview.xmlのコード:
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    .support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:layout_gravity="center_horizontal|top"
        android:layout_marginBottom="20dp"
        />

    <com.bartoszlipinski.recyclerviewheader.RecyclerViewHeader
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:layout_gravity="center_horizontal|top"
        android:layout_marginBottom="20dp"
        >

        .trinea.android.view.autoscrollviewpager.AutoScrollViewPager
            android:id="@+id/vp_books"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            />
    com.bartoszlipinski.recyclerviewheader.RecyclerViewHeader>

recyclerview_itemのコード:

<android.support.v7.widget.CardView 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="170dp"
    android:layout_margin="5dp"
    android:clickable="true"
    app:cardCornerRadius="4dp"
    app:cardElevation="10dp">
        <ImageView
            android:id="@+id/ivBook"
            android:transitionName="@string/transition_book_img"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
             />
android.support.v7.widget.CardView>

RecyclerAdapter.classのコード
public class RecyclerAdapter extends RecyclerView.Adapter {

    private List list = new ArrayList<>();
    private static final int ANIMATED_ITEMS_COUNT = 4;
    private Activity context;
    private boolean animateItems = false;
    private int lastAnimatedPosition = -1;

    public RecyclerAdapter(Activity context , List mlist) {
        TypedValue mTypedValue = new TypedValue();
        context.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true);
        list = updateItems(mlist,true);
        this.context = context;
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView ivBook;
        public int position;

        public ViewHolder(View v) {
            super(v);
            ivBook = (ImageView) v.findViewById(R.id.ivBook);
        }
    }


    private void runEnterAnimation(View view, int position) {
        if (!animateItems || position >= ANIMATED_ITEMS_COUNT - 1) {
            return;
        }

        if (position > lastAnimatedPosition) {
            lastAnimatedPosition = position;
            view.setTranslationY(Utils.getScreenHeight(context));
            view.animate()
                    .translationY(0)
                    .setStartDelay(100 * position)
                    .setInterpolator(new DecelerateInterpolator(3.f))
                    .setDuration(700)
                    .start();
        }
    }

    public List updateItems(List books, boolean animated) {
        List list = new ArrayList<>();
        animateItems = animated;
        lastAnimatedPosition = -1;
        list.addAll(books);
        notifyDataSetChanged();
        return list;
    }


    @Override
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                         int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recyclerview_item, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        runEnterAnimation(holder.itemView, position);
        RecyclerBean recyclerBean = list.get(position);
        holder.ivBook.setBackgroundResource(recyclerBean.getImg());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }


    public RecyclerBean getBook(int pos) {
        return list.get(pos);
    }


    public RecyclerItemClickListener.OnItemClickListener onItemClickListener = new RecyclerItemClickListener.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            RecyclerBean book = getBook(position);
            Intent intent = new Intent(context, RecyclerDetailActivity.class);
            intent.putExtra("book", book);

            ActivityOptionsCompat options =
                    ActivityOptionsCompat.makeSceneTransitionAnimation(context,
                            view.findViewById(R.id.ivBook),context.getString(R.string.transition_book_img));
            ActivityCompat.startActivity(context, intent, options.toBundle());

        }
    };
}

RecyclerVpAdapter.classのコード:
public class RecyclerVpAdapter extends FragmentPagerAdapter {

   ArrayList list;
   FragmentManager fm;

   public RecyclerVpAdapter(FragmentManager fm, ArrayList list) {
      super(fm);
      this.list = list;
      this.fm = fm;

   }

   @Override
   public int getCount() {
      return list.size();
   }

   @Override
   public Fragment getItem(int arg0) {
      return list.get(arg0);
   }

}

RecyclerFragment.classのコード:
RecyclerView mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
        //ListView     
//        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        //GirdView     
        GridLayoutManager layoutManager = new GridLayoutManager(getContext(),2);
        mRecyclerView.setLayoutManager(layoutManager);
        RecyclerViewHeader header = (RecyclerViewHeader) view.findViewById(R.id.header);
        AutoScrollViewPager viewPager = (AutoScrollViewPager) header.findViewById(R.id.vp_books);
        ArrayList fragmentList = new ArrayList<>();
        for (int i = 0; i < vpImgPath.length; i++) {
            RecyclerVpFragment recyclerVpFragment = RecyclerVpFragment.newInstance(vpImgPath[i]);
            fragmentList.add(recyclerVpFragment);
        }
        RecyclerVpAdapter bAdapter = new RecyclerVpAdapter(getChildFragmentManager(),fragmentList);
        viewPager.setAdapter(bAdapter);
        viewPager.setCurrentItem(0);
        viewPager.startAutoScroll();
        //  Viewpager     
        header.attachTo(mRecyclerView,true);
        for (int i = 0; i < title.length; i++) {
            RecyclerBean recyclerBean = new RecyclerBean();
            recyclerBean.setImg(imgPath[i]);
            recyclerBean.setInfo(tvInfo[i]);
            recyclerBean.setTitle(title[i]);
            recyclerBean.setCatalog(title[i]);
            recyclerBean.setAuthor_intro(title[i]);
            recyclerBean.setSummary(title[i]);
            recyclerBean.setImglarge(imgPath[i]);
            mList.add(recyclerBean);
        }
        mAdapter = new RecyclerAdapter(getActivity(),mList);
        //RecyclerView       
        mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), mAdapter.onItemClickListener));
        mRecyclerView.setAdapter(mAdapter);

上のRecyclerViewのitemレイアウトでは、親レイアウトはCardViewです.CardViewはFrameLayoutを継承し、自身にフィレットとシャドウ効果を追加できるレイアウトで、RecyclerView、ListView、GirdViewのitemレイアウトによく使われています.一般的に使用される属性は次のとおりです.

 app:cardCornerRadius="4dp"
 
 app:cardElevation="10dp"

 android:foreground="?android:attr/selectableItemBackground"

4、CoordinatorLayout、CollapsingToolbarLayout、TabLayout
(GIFが大きすぎて、サイズを圧縮してから、ちょっと問題があります)
CoordinatorLayoutは、サブview間のタッチイベントのレイアウトを別のレベルから制御し、CoordinatorLayoutのレイアウトでToolbarを使用して、外観とレイアウトの残りの部分をより自由にカスタマイズすることができます.AppBarLayoutを使用すると、TabLayoutのタブなどの他のViewとtoolbarがScrollingViewBehaviorとマークされたViewのスクロールイベントに応答できます.CollapsingToolbarLayout、伸縮可能な折りたたみToolbar、AppBarLayoutにToolbarを直接追加するとenterAlwaysCollapsedとexitUntilCollapsedscrollフラグを使用できますが、collapsingの詳細に異なる要素がどのように応答するかは制御できません.ここではCollapsingToolbarLayoutのapp:layout_を使用していますcollapseMode="pin"は、toolbarがviewで折り畳まれたときも画面の上部に固定されていることを確認します.Collapsingtoolbarrayoutとtoolbarを一緒に使用すると、titleは展開時に自動的に大きくなり、折り畳まれたときにフォントをデフォルト値に移行します.TabLayoutは、固定されたタブ(Viewの幅の平均配分)と、スクロール可能なタブ(Viewの幅が固定されず横スクロール可能)を実現しています.ViewPagerを使用してtab間を横断的に切り替える場合は、PagerAdapterのgetPageTitle()から直接タブを作成し、setupWithViewPager()を使用して両方を関連付けることができます.これにより、tabの選択イベントがViewPagerを更新し、同時にViewPagerのページがtabの選択状態を更新できるようになります.注意:図中のActivityの起動効果アニメーションは、次のコードで実現されます.
       ActivityOptionsCompat options =
       ActivityOptionsCompat.makeSceneTransitionAnimation(context,
       view.findViewById(R.id.ivBook),context.getString(R.string.transition_book_img));
       ActivityCompat.startActivity(context, intent, options.toBundle());

使用前にDesignを追加したパッケージを使用すると、この3つを使用できます.activity_appbar_detail.xmlマスターレイアウトコード:
"1.0" encoding="utf-8"?>
.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:fitsSystemWindows="true">


    .support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="256dp"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        .support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">


            "@+id/ivImage"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:transitionName="@string/transition_book_img"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.7" />

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


        .support.design.widget.CollapsingToolbarLayout>


    .support.design.widget.AppBarLayout>

    "match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        .support.design.widget.TabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill"
            app:tabMode="fixed"
            style="@style/MyCustomTabLayout"
            />

        .support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
.support.design.widget.CoordinatorLayout>

RecyclerDetailActivity.classコード:
public class RecyclerDetailActivity extends AppCompatActivity {


    private ViewPager mViewPager;
    private RecyclerBean mBook;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_appbar_detail);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onBackPressed();
            }
        });

        mBook = (RecyclerBean) getIntent().getSerializableExtra("book");
        CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
        collapsingToolbar.setTitle(mBook.getTitle());

        ImageView ivImage = (ImageView) findViewById(R.id.ivImage);
        ivImage.setBackgroundResource(mBook.getImglarge());
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(mViewPager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
        tabLayout.addTab(tabLayout.newTab().setText("  "));
        tabLayout.addTab(tabLayout.newTab().setText("  "));
        tabLayout.addTab(tabLayout.newTab().setText("  "));
        tabLayout.setupWithViewPager(mViewPager);
    }


    private void setupViewPager(ViewPager mViewPager) {
        MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(DetailFragment.newInstance(mBook.getSummary()), "  ");
        adapter.addFragment(DetailFragment.newInstance(mBook.getAuthor_intro()), "  ");
        adapter.addFragment(DetailFragment.newInstance(mBook.getCatalog()), "  ");
        mViewPager.setAdapter(adapter);
    }


    static class MyPagerAdapter extends FragmentPagerAdapter {
        private final List mFragments = new ArrayList<>();
        private final List mFragmentTitles = new ArrayList<>();

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        public void addFragment(Fragment fragment, String title) {
            mFragments.add(fragment);
            mFragmentTitles.add(title);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }

        @Override
        public int getCount() {
            return mFragments.size();
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitles.get(position);
        }
    }

}

5、TextInputLayout
12个Material Design风格控件的使用_第1张图片 TextInputLayoutコントロールはLinearLayoutのように表現され、コンテナです.TextInputLayoutにはサブエレメントが1つしか入れられません.ScrolViewと少し似ています.サブエレメントはEditTextでなければなりません.TextInputLayoutが実現する機能は、EditTextに最初のアルファベットを入力してhintを隠すと、TextInputLayoutに浮かぶラベルが表示され、クールなmaterialアニメーションレイアウトコードを担当することです.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/include_toolbar" />

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <EditText
            android:id="@+id/edit_text_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_username"
            android:inputType="textEmailAddress" />
    android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/edit_text_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_password"
            android:inputType="textEmailAddress" />
    android.support.design.widget.TextInputLayout>
    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_login" />

LinearLayout>

6、FloatingActionButton、Snackbar
12个Material Design风格控件的使用_第2张图片レイアウトコード:
.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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinatorLayout"
    tools:context="com.aswifter.material.BlankFragment">

    "match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        >

        .support.design.widget.FloatingActionButton
            android:id="@+id/flb_black"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:layout_marginRight="20dp"
            android:src="@drawable/ic_favorite"
            android:layout_alignParentBottom="true"
            app:fabSize="mini"
            app:layout_anchor="@id/coordinatorLayout"
            app:layout_anchorGravity="bottom|right|end"
            app:borderWidth = "0dp"
            />
    

.support.design.widget.CoordinatorLayout>

Fragmentのコード:
public class BlankFragment extends Fragment {

    private View view;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_blank, container, false);
        final CoordinatorLayout coordinatorLayout = (CoordinatorLayout) view.findViewById(R.id.coordinatorLayout);
        FloatingActionButton floatingActionButton = (FloatingActionButton) view.findViewById(R.id.flb_black);
        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Snackbar.make(coordinatorLayout,
                        "Snackbar", Snackbar.LENGTH_LONG)
                        .setAction("OK", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(
                                        getActivity(),
                                        "snackbar OK clicked",
                                        Toast.LENGTH_LONG).show();
                            }
                        })
                        .show();
            }
        });

        return view;
    }

}