AndroidStudio新特性5.0&6.0

Studio安装

2.3 第一次打开需要配置
    2.3.1 在Android Studio安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后
    追加 disable.android.first.run=true,避开连接谷歌服务器更新SDK

代码模板
logi
sout 打印
shift+F6改名
ctrl+H 查看继承类
ctrl+R 全局替换
ctrl+alt+M 提取方法

导入开源库
main 目录 下 java 和 res 和 清单文件 修改过时的API

你可以使用 ALT-UP 和 ALT-DOWN实现按照“节点”来扩大和缩小选择范围 - 让你选择代码的时候更加高效。

同时,ALT-SHIFT-UP 和 ALT-SHIFT-DOWN则可以让你当前所在行上移或者下移,省去了通过复制粘贴调整顺序的麻烦。
全局替换
 Android Studio正是基于IntelliJ之上。Android Studio最值得记住的快捷键是CMD-SHIFT-A(如果你是Windows或者Linux的pc则是CTRL-SHIFT-A )。

开源框架:
butterknife 插件
gsonformat 插件


快捷键

Android.5.0 L体验

卡片效果
水波纹效果
Android Material

RecyclerView CardView

material design

Marshmallow 棉花糖 安卓23M 6.0

lollipop 棒棒糖 安卓21,22 L 5.0 5.1

安卓M 6.0 material design

安卓5.0L体验
特点 : 卡片效果 ; 水波纹效果

安卓型号

ActionBar是什么?


升级版本的title.可以存放更多的控件的布局/工具栏。
开发者可以添加新的元素与编写对应的事件。
也可以删除ActionBar

  ActionBar actionBar = getSupportActionBar();//获取当前升级后标题栏
        //设置一个标题
        actionBar.setTitle("谷歌市场");
   setContentView(R.layout.activity_main);

写一个类继承于AppCompatActivity

获取ActionBar actionbar = getSupportActionBar();

res 目录下新建 menu文件夹 展示title 

onCreateOptionsMenu 创建菜单

appNs 自定义属性 自动导入

showAsAction 显示方式1.always 显示 2.never 默认值 3.ifRoom 如果有空间 就去展示

处理ActionBar的点击事件
onOptionsItemSelected()

标题上的元素

一。布局元素
C:\Users\Administrator\Desktop\DemoLM\001.ActionBar\src\main\res\menu\main_menu.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">

<!--menu是ActionBar上面元素的集合
元素是item
id控件的id
title显示字符串
icon显示图标
MenuInflater :菜单的打气筒
showAsAction显示方式1.always 显示 2.ifRoom有空间就显示 3.never默认值  显示在隐藏菜单
-->
<item android:id="@+id/item1" android:title="元素1"
    app:showAsAction="always"
    android:icon="@mipmap/ic_launcher"/>
<item android:id="@+id/item2" android:title="元素2"
    app:showAsAction="ifRoom"
    android:icon="@mipmap/ic_launcher"/>
<item android:id="@+id/item3" android:title="元素3"
    app:showAsAction="never"
    android:icon="@mipmap/ic_launcher"/>
<item android:id="@+id/item4" android:title="元素4"
    android:icon="@mipmap/ic_launcher"/>
</menu>

二.初始化与事件

//ActionBar元素的初始化方面

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    //1.元素
    //2.集合
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;//
}

//处理ActionBar元素的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    //Ctrl+D复制行
    switch (item.getItemId()) {
        case R.id.item1:
            Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
            break;
        case R.id.item2:
            Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
            break;
        case R.id.item3:
            Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
            break;
        case R.id.item4:
            Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
            break;

    }
    return super.onOptionsItemSelected(item);
}

菜单支持侧滑

1.SlidingMenu第三开源的侧滑控件

2.SlidingDrawer抽屉控件。

3.DrawerLayout:新的布局,可以添加两个元素(菜单与页面内容)

变量 android:layout_gravity=”start” 左侧 end 右侧

使用方法:
android.support.v4.widget.DrawerLayout 包裹两个元素
android:layout_gravity=”start”去标记菜单

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="com.itheima.a001actionbar.MainActivity">
<FrameLayout
    android:id="@+id/content"
    android:background="#FFF000"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
<FrameLayout
    android:id="@+id/menu"
    android:background="#8EC349"
    android:layout_gravity="start"
    android:layout_width="200dp"
    android:layout_height="match_parent"/>
</android.support.v4.widget.DrawerLayout>

配置5.0主题相关的颜色

parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <!--配置actionbar背景颜色-->
    <item name="colorPrimary">@color/colorPrimary</item>
    <!--手机状态栏的颜色colorPrimaryDark-->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

#换肤(切换theme)
 替换软件或者系统的"皮肤"--theme

 步骤一。
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     int theme=getSharedPreferences("theme.xml",MODE_PRIVATE).getInt("theme",R.style.GreenTheme);
setTheme(theme);

步骤二。重启activity不让用户发现(去掉动画)
int []themes=new int[]{R.style.CyanTheme,R.style.PinkTheme,R.style.BrownTheme,R.style.BlueTheme};
  public void changeSkin(View view)
  {
      SharedPreferences.Editor editor = getSharedPreferences("theme.xml", MODE_PRIVATE).edit();
      Random random=new Random();
      editor.putInt("theme",themes[random.nextInt(4)]);
      editor.commit();
      startActivity(new Intent(this,MainActivity.class));
      finish();
      //覆盖activity动画效果
      overridePendingTransition(0,0);
  }

旋转按钮

是一个联动控件。(在菜单与箭头之间产生联动。)
ActionBarDrawerToggle

一。创建按钮 绑定给 DrawerLayout

drawer = (DrawerLayout) findViewById(R.id.activity_drawer);
    actionBar.setDisplayHomeAsUpEnabled(true);//让Actionbar去初始化箭头按钮
    ActionBarDrawerToggle actionBarDrawerToggle =    new ActionBarDrawerToggle(activity, drawer, R.string.open, R.string.close);
    actionBarDrawerToggle.syncState();//同步  替换原有按钮
    drawer.addDrawerListener(actionBarDrawerToggle);

二。编写ActionBar中的元素android.R.id.home;

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    //Ctrl+D复制行
    switch (item.getItemId()) {
        case android.R.id.home:
            Toast.makeText(this, "旋转箭头", Toast.LENGTH_SHORT).show();
            //Ctrl+Alt+L 格式化代码
            //Ctrl+Alt+F 将局部变量生成成员变量
            View menu=findViewById(R.id.menu);
            if (drawer.isDrawerOpen(menu)) {
                drawer.closeDrawer(menu);
            } else {
                drawer.openDrawer(menu);
            }
            break;
         }
      }

ActionBar 的logo显示

//设置logo
        actionBar.setLogo(R.mipmap.ic_launcher);
        //加两个条件才能显示出来
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayUseLogoEnabled(true);

练习完整代码

public class MainActivity extends AppCompatActivity {

@BindView(R.id.butt)
Button butt;
@BindView(R.id.content)

FrameLayout menu;
@BindView(R.id.activity_main)
DrawerLayout activityMain;
private int[] themes = new int[]{R.style.BlueGreyTheme, R.style.BlueTheme, R.style.CyanTheme, R.style.PinkTheme};
private DrawerLayout drawer;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int theme = getSharedPreferences("theme.xml", MODE_PRIVATE).getInt("theme", R.style.CyanTheme);
    setTheme(theme);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("捕获");
    setContentView(R.layout.activity_main);

    //让actionbar 去初始化小箭头
    actionBar.setDisplayHomeAsUpEnabled(true);
    //1上下文
    //2.侧滑菜单
    //3.R.string. 开启
    //4.R.string  关闭
    //初始化 DrawerLayout
    drawer = (DrawerLayout) findViewById(R.id.activity_main);
    ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, drawer, R.string.open, R.string.close);
    //同步  替换原有按钮
    drawerToggle.syncState();
    //给DrawerLayout添加监听
    drawer.addDrawerListener(drawerToggle);
    //Ctrl+Alt+L 格式化代码
    //Ctrl+Alt+F 将局部变量生成成员变量
    ButterKnife.bind(this);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.mani_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu2:
            Toast.makeText(this, "新闻", Toast.LENGTH_SHORT).show();
            break;
        case R.id.menu3:
            Toast.makeText(this, "NBA", Toast.LENGTH_SHORT).show();
            break;

        case R.id.menu4:
            Toast.makeText(this, "财经", Toast.LENGTH_SHORT).show();
            break;

        case R.id.menu5:
            Toast.makeText(this, "生活", Toast.LENGTH_SHORT).show();
            break;
        case android.R.id.home:
            Toast.makeText(this, "旋转箭头", Toast.LENGTH_SHORT).show();
            View id = findViewById(R.id.menu);
            if (drawer.isDrawerOpen(id)){
                drawer.closeDrawer(id);
            }else{
                drawer.openDrawer(id);
            }
            break;
    }

    return super.onOptionsItemSelected(item);
}

@OnClick(R.id.butt)
public void onClick() {
    SharedPreferences.Editor edit = getSharedPreferences("theme.xml", MODE_PRIVATE).edit();
    Random random = new Random();

    edit.putInt("theme", themes[random.nextInt(4)]);
    edit.commit();

    startActivity(new Intent(this, MainActivity.class));
    finish();
    overridePendingTransition(0, 0);


}

RecyclerView

去中央库下载
compile ‘com.android.support:recyclerview-v7:24.0.0’
RecyclerView替换 ListView 和GridView

getView优化
1.convertView 2.viewHolder优化findviewbyid

layoutManager:排列方式

列表:LinearLayoutManager

网络:GridLayoutManager

瀑布流:StaggerGridLayoutManager

列表:LinearLayoutManager 纵向

RecyclerView.LayoutManager layout = new LinearLayoutManager(this);
    //先设置LayoutManager 管理者
    rv.setLayoutManager(layout);

    MyAdapter adapter = new MyAdapter();
    rv.setAdapter(adapter);

RecyclerView.Adapter

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private ArrayList<String> list = new ArrayList<>();

    public MyAdapter() {
        for (int i = 0; i < 20; i++) {
            list.add("中心" + i);
        }
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(parent.getContext(), R.layout.item, null);
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyViewHolder mvh = (MyViewHolder) holder;
        mvh.tv.setText(list.get(position));
    }

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


    static class MyViewHolder extends RecyclerView.ViewHolder{
        @BindView(R.id.iv)
        ImageView iv;
        @BindView(R.id.tv)
        TextView tv;

        public MyViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this,itemView);
        }
    }
}

列表:LinearLayoutManager 纵向

    //1.上下文
    //2.方向
    //3.倒排  1->10   true  10 -->1
RecyclerView.LayoutManager layout = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
    rv.setLayoutManager(layout);

    MyAdapter adapter = new MyAdapter();
    rv.setAdapter(adapter);

网络:GridLayoutManager 有横向和纵向

RecyclerView.LayoutManager layout = new GridLayoutManager(this, 3, LinearLayoutManager.HORIZONTAL, true);
    rv.setLayoutManager(layout);
    MyAdapter adapter = new MyAdapter();
    rv.setAdapter(adapter);

瀑布流:StaggerGridLayoutManager 有横向和纵向

// 参数1 列数或者横数 参数2 方向
RecyclerView.LayoutManager layout = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);

    rv.setLayoutManager(layout);
    MyAdapter adapter = new MyAdapter();
    rv.setAdapter(adapter);

CardView

是升级的FrameLayout.
CardView 5.0新控件  v7 .从FrameLayout扩展来的。
存放在兼容包。可以运行低版本。
1.阴影
2.圆角
3.背景颜色。

<CardView>  包裹起来
视图
<CardView>

中央库下载:android.support.v7.widget.CardView 

<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="100dp"
android:layout_height="100dp"
app:cardCornerRadius="14dp"
app:cardElevation="10dp"
app:cardUseCompatPadding="true"
app:contentPadding="20dp"
>
<!--视图 注释c+/-->
<!--cardElevation     海拨   阴影与高度有关
cardCornerRadius      卡片圆角之后
cardUseCompatPadding  针对部分设备不兼容
-->

SwipeRefreshLayout 下拉刷新布局

不需要去下载 V7包包含V4包
android.support.v4.widget.SwipeRefreshLayout
提供一个新布局,支持任意的下拉刷新

<SwipeRefreshLayout>
需要刷新的布局.
</SwipeRefreshLayout>

加联网的权限

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    web = (WebView) findViewById(R.id.wv);
    refresh = (SwipeRefreshLayout) findViewById(R.id.srl);
    initData();
}


private void initData() {

    // 不去跳转浏览器加载网页,设置一个禁止调用系统浏览器的对象
    WebViewClient webClient = new WebViewClient();
    web.setWebViewClient(webClient);

    WebSettings settings = web.getSettings();
    // 快速加载网页
    settings.setJavaScriptEnabled(true);

    refresh.setColorSchemeColors(Color.BLUE,Color.CYAN,Color.GRAY,Color.MAGENTA);
    refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            web.loadUrl("http://www.baidu.com");
        }
    });


    //WebChromeClient 处理页面加载进度
    WebChromeClient client = new WebChromeClient(){
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            //下载完成后 下拉刷新隐藏
            if (newProgress==100){
                refresh.setRefreshing(false);
            }
        }
    };
    web.setWebChromeClient(client);

安卓6.0 中央库搜索design

compile 'com.android.support:design:24.2.0'

FloatingActionBar 悬浮按钮。有水波纹效果

由imageview升级过来,有悬浮效果

Snackbar 底部弹出一个工具栏 用法和Toast一样


FloatingActionBar 悬浮按钮 有水波纹效果

compile ‘com.android.support:design:24.2.0’


Snackbar 底部弹出一个工具栏 用法和Toast一样

 private FloatingActionButton fab;
    private Snackbar snack;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fab = (FloatingActionButton) findViewById(R.id.fab);
        snack = Snackbar.make(fab, "开启", Snackbar.LENGTH_SHORT);

        //点击关闭
        snack.setAction("关闭", new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                snack.dismiss();
            }
        });
    }

    public void click(View v) {
        snack.show();
    }

coordinate 协调布局

协调Snackbar 在布局中包裹内容就行 不能把relativelayout放进去


<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.a08_floatingactionbutton.MainActivity">

    <android.support.design.widget.FloatingActionButton xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerInParent="true"
        android:layout_gravity="bottom|right"
        android:onClick="click"
        app:backgroundTint="#F00"
        app:elevation="8dp"
        app:fabSize="normal"
        app:rippleColor="@color/colorPrimaryDark" />
</android.support.design.widget.CoordinatorLayout>

logcat看不到时 命令 adb logcat

指示器6.0 提供 TabLayout

compile ‘com.android.support:design:24.2.0’

用法:1.初始化viewpager
2.将viewpager设置给指示器


compile 'com.android.support:design:24.2.0'
<android.support.design.widget.TabLayout
    android:id="@+id/tab"

    android:layout_width="match_parent"
    android:layout_height="40dp">

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

MyAdapter pagerAdapter = new MyAdapter(getSupportFragmentManager());
    //设置FragmentPagerAdapter
    vp.setAdapter(pagerAdapter);
    //设置指示器线条的颜色
    tab.setSelectedTabIndicatorColor(Color.DKGRAY);
    //设置指示器线条的高度
    tab.setSelectedTabIndicatorHeight(3);
    //设置指示器选中和默认的颜色,
    tab.setTabTextColors(Color.BLUE,Color.RED);
    //设置指示器的滚动模式
    tab.setTabMode(TabLayout.MODE_SCROLLABLE);
    //设置指示器依赖viewpager
    tab.setupWithViewPager(vp);

FragmentPagerAdapter

public class MyAdapter extends FragmentPagerAdapter {


    public MyAdapter(FragmentManager fm) {
        super(fm);

    }


    @Override
    public Fragment getItem(int position) {
        // 返回一个Fragment 新建的类
        return new MyFragment();
    }

    @Override
    public int getCount() {
        return 15;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "标题" + position;
    }

}

Fragment

public class MyFragment extends Fragment {

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ImageView view = new ImageView(container.getContext());
        view.setImageResource(R.mipmap.w4);
        return view;
    }
}

ToolBar的使用

用来取代actionbar
位置灵活 actionbar固定在activity的顶部,toolbar可以在任意位置
设置导航栏图标
设置app的logo
设置标题和子标题
支持一个控件或者多个自定义控件
支持action Menu

布局中设置

<android.support.v7.widget.Toolbar
    android:id="@+id/toolb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></android.support.v7.widget.Toolbar>

 //找到控件
        Toolbar bar = (Toolbar) findViewById(R.id.toolb);
        //设置logo
        bar.setLogo(R.mipmap.ic_launcher);
        //设置背景色
        bar.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
        //设置主标题
        bar.setTitle("野马");
        //设置子标题
        bar.setSubtitle("在奔跑");
        //设置子标题颜色
        bar.setSubtitleTextColor(Color.RED);
        //设置导航图标
        bar.setNavigationIcon(R.mipmap.ic_launcher);

        //设置menu菜单
        bar.inflateMenu(R.menu.main_menu);
        //设置menu菜单的点击事件
        bar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.menu1:
                        Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
                        break;
                }

                return false;
            }
        });

AppBarLayout Toolbar 显示推出Toolbar的效果

需要下载类库 coordinate 包裹在外面 去掉LinearLayout 布局AppBarLayout 实现滚出屏幕的效果

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <android.support.design.widget.AppBarLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tl"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></android.support.design.widget.TabLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#aaccdd"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v4.view.ViewPager>


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

AppBarLayout Toolbar 显示推出Toolbar的效果

    // 初始化ActionBar
    initToolBar();
    //初始化ViewPager
    initViewPager();
    //初始化TableLayout
    initTableLayout();

}

private void initToolBar() {
    Toolbar bar = (Toolbar) findViewById(R.id.bar);
    bar.setLogo(R.mipmap.ic_launcher);
    bar.setTitle("酷我");
    bar.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
    bar.inflateMenu(R.menu.main_menu);

}



private void initTableLayout() {
    TabLayout tab = (TabLayout) findViewById(R.id.tl);
    tab.setTabTextColors(Color.BLACK,Color.RED);
    tab.setSelectedTabIndicatorHeight(3);
    tab.setSelectedTabIndicatorColor(Color.BLUE);
    tab.setTabMode(TabLayout.MODE_SCROLLABLE);
    tab.setupWithViewPager(pager);
}

private void initViewPager() {
    pager = (ViewPager) findViewById(R.id.vp);

    MyAdapter adapter = new MyAdapter(getSupportFragmentManager());

    pager.setAdapter(adapter);
}

ViewPager的 MyAdapter

public class MyAdapter extends FragmentPagerAdapter{


    private final ArrayList<String> list;

    public MyAdapter(FragmentManager fm) {

        super(fm);
        String[] menu = new String[]{"新闻","娱乐","体育","财经","头条","本地","NBA"};
        list = new ArrayList<>();

        for (int i = 0; i < menu.length; i++) {
            list.add(menu[i]);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {

        return list.get(position);
    }

    @Override
    public Fragment getItem(int position) {

        return new MyFragment();
    }

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

}

return一个MyFragment

public class MyFragment extends Fragment {


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        RecyclerView  recyView = new RecyclerView(container.getContext());
        // 创建一个垂直的瀑布流
        RecyclerView.LayoutManager layout = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyView.setLayoutManager(layout);
        MyRecycleAdapter adapter = new MyRecycleAdapter();
        recyView.setAdapter(adapter);

        return recyView;

    }

}

MyRecycleAdapter继承RecyclerView

public class MyRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private final int[] list;
    public MyRecycleAdapter() {
        list = new int[]{R.mipmap.w1,R.mipmap.w2,R.mipmap.w3,R.mipmap.w4,R.mipmap.w5};
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater from = LayoutInflater.from(parent.getContext());
        View inflate = from.inflate(R.layout.item_recyclerview, parent, false);
        RecyclerView.ViewHolder holder = new ViewHolder(inflate);


        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ViewHolder hold = (ViewHolder) holder;

        ((ViewHolder) holder).iv.setImageResource(list[position]);
    }

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


    }

    static class ViewHolder extends RecyclerView.ViewHolder{
        @BindView(R.id.iv)
        ImageView iv;
        @BindView(R.id.tv)
        TextView tv;

        ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
}

注意

在recyclerView 时需要用LayoutInflater

把toolBar推出屏幕

TabLayout + viewpager的用法

<android.support.design.widget.TabLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="45dp"
    android:background="@color/white"
    app:tabGravity="fill"
    app:tabIndicatorColor="@color/chart_title"
    app:tabIndicatorHeight="2dp"
    app:tabMaxWidth="0dp"
    app:tabMode="fixed"
    app:tabSelectedTextColor="@color/chart_title"
    app:tabTextAppearance="@style/TabLayoutTextStyle"
    app:tabTextColor="@color/black_trans_45">
</android.support.design.widget.TabLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/message_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.v4.view.ViewPager>

这样设置tab平分屏幕宽度

    app:tabGravity="fill"
    app:tabMaxWidth="0dp"
    app:tabMode="fixed"

在fragment中添加fragment,需要用到getChildFragmentManager()

List<BaseFragmnet> list = new ArrayList<>();
BaseFragmnet listFragment = new MessageListFragment();
BaseFragmnet officeFragment = new MobileOfficeFragment();
list.add(listFragment);
list.add(officeFragment);
NewMessagePagerAdapter pagerAdapter = new NewMessagePagerAdapter(getChildFragmentManager(), list);
messagePager.setAdapter(pagerAdapter);
//使tablayout依赖到viewpagwer
tabLayout.setupWithViewPager(messagePager);
//在adapter中重写getPageTitle方法
public class NewMessagePagerAdapter extends FragmentPagerAdapter {

    private String[] titles = new String[]{"消息列表", "移动办公"};
    private List<BaseFragmnet> list;

    public NewMessagePagerAdapter(FragmentManager fm, List<BaseFragmnet> list) {
        super(fm);
        this.list = list;
    }

    public BaseFragmnet getFragment(int pos) {
        return list.get(pos);
    }

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

    @Override
    public int getCount() {
        return titles.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}
发布了63 篇原创文章 · 获赞 10 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/yin13753884368/article/details/74762091