Carson带你学Android:底部/顶部Tab导航栏快速实现-TabLayout+ViewPager+Fragment

安卓:BottomNavigationBar——底部导航栏控件 BottomNavigationBar是一个用于Android应用程序的底部导航栏控件,通常用于在应用程序的不同页面之间进行快速切换。它提供了一种直观且易于使用的导航方式,使用户可以轻松访问应用程序的各个模块。BottomNavigationBar(底部导航栏)是一种常见的用户界面设计模式,常用于移动应用程序中。 阅读详情

前言

Android开发中使用顶部 & 底部Tab导航栏的频次非常高,主要的实现手段有以下:

  • TabWidget
  • 隐藏TabWidget,使用RadioGroup和RadioButton
  • FragmentTabHost
  • 5.0以后的TabLayout
  • 最近推出的 Bottom navigation

在上一篇我介绍了如何使用(Fragment+FragmentTabHost+ViewPager)
实现底部菜单栏,详情请看

底部Tab菜单栏实现(FragmentTabHost+ViewPager+Fragment)

今天我手把手教大家如何使用TabLayout+ViewPager+Fragment的组合来实现顶部和底部Tab导航栏

Carson带你学Android系列文章
Carson带你学Android:学习方法
Carson带你学Android:四大组件
Carson带你学Android:自定义View
Carson带你学Android:异步-多线程
Carson带你学Android:性能优化
Carson带你学Android:动画


目录

顶部&底部菜单栏.jpg


1. 概念介绍

1.1 TabLayout
  • 定义:实现Material Design效果的控件库(Android Design Support Library);
  • 作用:用于实现点击选项进行切换选项卡的自定义效果(5.0可用)
1.2 ViewPager
  • 定义:ViewPager是android扩展包v4包中的类
  • 作用:左右切换当前的view,实现滑动切换的效果。

注:
1.ViewPager类直接继承了ViewGroup类,和LinearLayout等布局一样,都是一个容器,需要在里面添加我们想要显示的内容。
2.ViewPager类需要PagerAdapter适配器类提供数据,与ListView类似 3.Google官方建议ViewPager配合Fragment使用

具体使用请参考我写的另外一篇文章:Android开发:ViewPage的介绍

1.3 Fragment
  • 定义:Fragment是activity的界面中的一部分或一种行为

1.把Fragment认为模块化的一段activity
2.它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除
3.Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。

  • 作用:支持更动态、更灵活的界面设计(从3.0开始引入)

具体使用请参考我写的另外一篇文章Android开发:Fragment介绍&使用方法解析


2. 总体设计思路

  • TabLayout:点击切换选项卡
  • Fragment:存放不同选项的页面内容
  • ViewPager:实现页面的左右滑动效果

3. 实现步骤

利用(TabLayout+ViewPager+Fragment)实现顶部&底部Tab导航栏的步骤一共有6个:

  • 步骤1:添加依赖
  • 步骤2:创建需要的Fragment布局文件(需要多少个Tab选项,就建多少个Fragment)
  • 步骤3:创建Fragment对应的Activity类
  • 步骤4:定义适配器Adapter
  • 步骤5:定义主布局activity_main.xml文件
  • 步骤6:定义MainActivity类

4. Demo实战

4.1 效果图(丑是为了让大家更好地理解各个属性设置~~)

效果图1

效果图2

4.2 工程目录

工程目录

4.3 具体实现

接下来大家和我一步步去实现吧!!

强烈建议大家先去Carson_Ho的Github:Top&Bottom_tabbar去下载完整Demo,这样看效果会更好哦!

步骤1:在Gradle中添加依赖

//TabLayout
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:design:23.4.0'
//ViewPage
android.support.v4.view.ViewPager

步骤2:创建需要的Fragment布局文件(需要多少个Tab选项,就建多少个Fragment,这里以4个举例)
fragment1.xml(一共4个,这里只写出一个)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Fragment1"/>
</RelativeLayout>

步骤3:创建Fragment对应的Activity类
Fragment1(一共4个,这里只写出一个)

package com.example.carson_ho.toptabbar;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Carson_Ho on 16/7/22.
 */
public class Fragment1 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1, container, false);
    }

}

步骤4:定义适配器Adapter类
这里的适配的作用是将Fragment与ViewPager进行适配
MyFragmentPagerAdapter.java

package com.example.carson_ho.toptabbar;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

/**
 * Created by Carson_Ho on 16/7/22.
 */
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    private String[] mTitles = new String[]{"首页", "发现", "进货单","我的"};

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

    @Override
    public Fragment getItem(int position) {
        if (position == 1) {
            return new Fragment2();
        } else if (position == 2) {
            return new Fragment3();
        }else if (position==3){
            return new Fragment4();
        }
        return new Fragment1();
    }

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

    //ViewPager与TabLayout绑定后,这里获取到PageTitle就是Tab的Text
    @Override
    public CharSequence getPageTitle(int position) {
        return mTitles[position];
    }
}

步骤5:定义主布局activity_main.xml
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="100p"
        //导航栏背景颜色
        android:background="#ffff00"
        //指示器颜色
        app:tabIndicatorColor="#66ff33"
        //指示器高度
        app:tabIndicatorHeight="20p"
        //普通状态下文字的颜色
        app:tabTextColor="@color/colorPrimary"
        //选中时文字的颜色
        app:tabSelectedTextColor="#CC33FF"
        //是否可滑动:fixed:固定;scrollable:可滑动
        app:tabMode="fixed"
        //设置选项卡的背景:此处要写一个selector)
        app:tabBackground="@drawable/selected"
             //设置字体大小:此处要写一个style) app:tabTextAppearance="@style/MyTabLayoutTextAppearance"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
</LinearLayout>

selected.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_selected="true" android:drawable="@color/colorPrimary"/>    <item android:drawable="@color/c1olorAccent"/></selector>

style.xml

<style name="MyTabLayoutTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">    <item name="android:textSize">5sp</item>    <item name="android:textColor">@color/c1olorAAA</item></style>

步骤6:定义MainActivity
MainActivity.Java

package com.example.carson_ho.toptabbar;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private TabLayout mTabLayout;
    private ViewPager mViewPager;
    private MyFragmentPagerAdapter myFragmentPagerAdapter;

    private TabLayout.Tab one;
    private TabLayout.Tab two;
    private TabLayout.Tab three;
    private TabLayout.Tab four;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getSupportActionBar().hide();//隐藏掉整个ActionBar
        setContentView(R.layout.activity_main);

        //初始化视图
        initViews();
    }
    
    private void initViews() {

        //使用适配器将ViewPager与Fragment绑定在一起
        mViewPager= (ViewPager) findViewById(R.id.viewPager);
        myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(myFragmentPagerAdapter);

        //将TabLayout与ViewPager绑定在一起
        mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
        mTabLayout.setupWithViewPager(mViewPager);

        //指定Tab的位置
        one = mTabLayout.getTabAt(0);
        two = mTabLayout.getTabAt(1);
        three = mTabLayout.getTabAt(2);
        four = mTabLayout.getTabAt(3);

        //设置Tab的图标,假如不需要则把下面的代码删去
        one.setIcon(R.mipmap.ic_launcher);
        two.setIcon(R.mipmap.ic_launcher);
        three.setIcon(R.mipmap.ic_launcher);
        four.setIcon(R.mipmap.ic_launcher);


    }
}

4.4 效果图(丑是为了让大家更好地理解各个属性设置~~)

效果图1

效果图2

4.5 底部Tab导航栏实现

实现了顶部Tab导航栏,该如何实现底部Tab导航栏实现呢?很简单!只需要在上面步骤5:定义主布局activity_main.xml中将TabLayout和ViewPager的位置交换就可以了!如下图:
步骤5:定义主布局activity_main.xml
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="100p"
        //导航栏背景颜色
        android:background="#ffff00"
        //指示器颜色
        app:tabIndicatorColor="#66ff33"
        //指示器高度
        app:tabIndicatorHeight="20p"
        //普通状态下文字的颜色
        app:tabTextColor="@color/colorPrimary"
        //选中时文字的颜色
        app:tabSelectedTextColor="#CC33FF"
        //是否可滑动:fixed:固定;scrollable:可滑动
        app:tabMode="fixed"
        //设置选项卡的背景:此处要写一个selector)
        app:tabBackground="@drawable/selected"/>

</LinearLayout>
效果图

底部菜单栏效果图


5. 完整Demo下载地址

Carson_Ho的Github:Top&Bottom_tabbar


6. 总结


欢迎关注Carson_Ho的优快云博客 与 公众号!

博客链接:https://carsonho.blog.youkuaiyun.com/


请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

Android 标题栏、状态栏、系统栏、导航栏、应用栏及各个位置的颜色设置 自2014年Google I/O上Material Design横空出世后,市场上的应用又逐步趋向了样式的风格统一,support library中很快就出来了ToolBar控件,一个定制化的ViewGroup,来完善ActionBar的使用。Actionbar是Android3.0之后的一个重要的交互元素,Actionbar位于Activity的顶部,用于显示图标、菜单、标题,广泛用于View的交互、导航等功能。在Android3.0之后,Actionbar是默认添加的,只要你。下拉就会出现通知栏。 阅读详情

相关推荐

MaterialDesign学习篇(四),如何使用TabLayout

什么是TabLayout上图中,我们可以看到,该页面分成三个页签,每个页签对应不同的内容,如果让我们来实现布局的话,我们会很容易地想到布局为一个页签指示器+ViewPager,以前,相信各位大多使用的是GitHub上的开源框架PagerSlidingTabTrip来实现指示器的效果,而如今,Android中也有自带这种指示器的控件TabLayout,TabLayout存在于Android Desig

Chay_Chan的博客 1652

Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)

现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能它是android原生的一个底部导航框架,一般和Fragment一起使用。xml布局:最外层的layout不用管,那是databinding框架的根布局,主要的布局FrameLayout来装载fragment列表,BottomNavigationView实现底部导航栏,最后监听绑定实现点击切换 其中BottomNavigation

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 1万+

Android14 RK3576开发板有线网卡静态IP配置全攻略(附数据库修改详解)

本文详细介绍了在Android 14 RK3576开发板上实现有线网卡出厂默认静态IP配置的完整方案。通过深入修改系统源码和SettingsProvider数据库,扩展全局设置字段并注入默认值,确保设备首次启动即自动应用预设的IP地址、子网掩码、网关和DNS,适用于工业控制、数字标牌等批量部署场景,有效提升生产效率。

weixin_29253711的博客 606

android : 底部导航栏的实现(使用ViewPager和BottomNavigationView)

注意:BottomNavigationView需要一个app:menu菜单文件(下面会作讲解)本案例中需要用的控件ViewPager和BottomNavigationView。那么我么如何设置两个控件联动(仅需要两个方法即可)创建完成后会生成Fragment的java文件和对应的XML文件。Fragment文件不需要修改,后期只需要传入两个参数即可。接下来创建空白的Fragment,不用做任何修改。创建5个即可,创建方法相同,以下只示例一个。接下来是Viewpager的适配器。

weixin_63987141的博客 8170

GPMC开发笔记(TI开发者推荐笔记)

因为gpmc(General-Purpose Memory Controller)是TI特有的驱动,gpmc的资料比较少,本人开发gpmc驱动算是摸了很多石头过河的。所以想通过这遍文章可以给也做GPMC驱动开发的后来者有一点参考价值。文章如有瑕疵也请各位批评改正。 1.GPMC介绍 gpmc主要用于与nandflash,norflash,fpga进行通信。在这里主要介绍gpmc16位数据和地址线不复用nor模式下的通信。 注意:在这种模式下gpmc_a[0]引脚是没法使用的 1.1GPMC信号线

weixin_44316996的博客 7499

Argoverse2数据集保姆级导入教程:从下载到预处理全流程解析

本文详细解析了Argoverse2数据集的完整导入流程,从环境配置、数据下载到预处理和高效加载策略。作为自动驾驶领域的标杆数据集,Argoverse2提供多模态传感器数据和高精地图信息,帮助研究者快速搭建数据处理流水线。文章包含实用代码示例和性能优化技巧,特别适合自动驾驶算法开发者参考。

weixin_29035405的博客 335

Android状态栏&导航栏使用总结(重要)

1.通过View # setSystemUiVisibility改变状态栏或者导航栏状态后,当我们离开对应Activity时,这些改变会丢失,因此当我们重新回到此Activity时,我们应该在onResume 或者 onWindowFocusChanged中重新设置需要的状态。

火星男孩的分享空间 4485

【excel+vba】一表拆多表+不同收件人附带不同附件

快捷处理:拆分多个不同表 给不同人发送不同内容且附带附件

weixin_42779327的博客 2968

安卓底部导航栏几种实现方式,小白菜看了都说简单。

安卓底部导航栏的实现方式探索: 1.安卓提供默认的导航方式 2.使用简单布局的方式实现 3.Viewpager+RadioGroup+Layout 4.ViewPager+Fragment+RadioGroup(推荐) 纯原生java代码,未集成其他第三方复杂的库,代码经过测试可行。 开发环境: AndroidStudio 4.0 Java语言 SDK8.0以上...

小马哥的博客 1万+

arcgis建筑数据的矢量化(一)

简单来说,建筑数据的获取无外乎是矢量化和去网站下载 无奈的是,osm和网上的建筑数据只有全国的主要城市,实在是为难我们这些小城市的,百度和天地图上是有建筑数据,无奈人家不要开放下载啊,所以就只能矢量化咯, 矢量化,无外乎手动和自动,手动就是新建shp面手动勾绘,这里就不讲了,我们来看看自动矢量化 自动矢量化在arcgis中主要是利用arcscan和栅格转面(栅格转面这个效果真是一言难尽,所以我们主要讨论arcscan) 同时我们矢量化也不一定要局限于arcgis...

Jasenjane的博客 3926

Benchmark系列——基本概念和分类

本文主要介绍了Benchmark的基本概念和分类情况。

Bluetangos的博客 8437

【Android入门到项目实战-- 11.2】—— 实现底部导航栏(RadioGroup+Fragment)

Android如何实现底部导航栏,使用RadioGroup+Fragment实现,如何实现不能左右滑动切换页面的导航栏?具体代码实现

个人博客 4803

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 966

Android 顶部导航栏(TabLayout+ViewPager2)

文章目录结构布局逻辑代码1.Adapter2.Fragment页面 结构 布局 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"

weixin_45155865的博客 8127

42页Claude 3技术报告解读(Opus, Sonnet, Haiku)

在Claude 3模型中,增加了一个额外的原则到Claude的宪法中,以鼓励尊重残疾人权利,这一原则源自对集体宪法AI的研究。Claude 3模型的训练基于专有的混合数据集,包括截至2023年8月互联网上公开可用的信息,以及第三方提供的非公开数据、数据标注服务和付费承包商提供的数据,还有内部生成的数据。这些初始响应通常包含有害和有毒的内容。Claude 3模型家族在推理、编码和问答任务上展现出卓越的性能,特别是在行业标准基准测试中取得了显著的提升,证明了其在处理复杂问题和提供准确答案方面的能力。

具身机器人和通用AI 2435

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android 底部导航栏(三、ViewPager+TabLayout+Fragment)简单易懂

Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具),Viewpager使用起来就是我们通过创建adapter给它填充多个view,左右滑动时,切换不同的view。Google官方是建议我们使用Fragment来填充ViewPager的,这样 可以更加方便的生成每个Page,以及管理每个Page的生命周期。可以用来主页/模块切换,图片轮播,新手引导等等。ViewPager 全面总结_淡然一笑、的博客-优快云博客_viewpager。

Android 领域开发程序员,希望通过写博客的方式不断的总结提升自己,大家共同进步哦! 6450

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android---TabLayout

了解 TabLayout 的基本使用和属性。掌握给 TabLayout 添加卡片两种的方法,包括 TabItem 和 TabLayoutMediator()。

qq_44950283的博客 8440

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

三种实现Android主界面Tab的方式

转载于:https://www.cnblogs.com/caobotao/p/5103673.html 在平时的Android开发中,我们经常会使用Tab来进行主界面的布局。由于手机屏幕尺寸的限制,合理使用Tab可以极大的利用屏幕资源,给用户带来良好的体验。学会Tab的使用方法已经成为学习Android开发必不可少的技能了。我们经常使用的微信、QQ就是使用Tab的方式进行主界面的布局的。   ...

taoerchun的专栏 7637

Android实现底部导航栏方法(Navigation篇)

底部导航栏一直是大部分App不可缺失的一部分最近注意到Jetpack中的Navigation支持Fragment的切换操作特此浅研究一下到此,Nav自定义导航栏已经实现,基本使用的模块来源日常使用经验。至于底部导航栏,网上大部分人都推荐使用 BottomNavigationView 配合使用好用,但自定义样式比较难,然后就只能翻BottomNavigationView的源码,看它是怎么实现切换页面而不销毁fragment。

weixin_47311938的博客 7841

android tab选项卡实现 仿知乎App

效果 TabActivity package com.coral3.ah.ui.activity; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.Fragm

weixin_44659286的博客 1058

Android中实现可滑动的Tab的3种方式

这篇文章主要介绍了Android中实现可滑动的Tab的3种方式,需要的朋友可以参考下 1. 第一种,使用 TabHost + ViewPager 实现 该方法会有一个Bug,当设置tabHost.setCurrentTab()为0时,ViewPager不显示(准确的说是加载),只有点击其他任意一个tab后才会加载。 有解的同学吼一声~~~~~~~

像个孩子壹洋 1163

Android---简易的底部导航栏

在bottomnavigationitem.xml 里添加一个 item 就是在 底部导航栏里添加了一个可点击的 tab 按钮。注意,item 里面的 icon 属性你可以自己找一下好看的icon,这里简单用 mipmap 里的 ic_launcher.webp 来作为 icon。对于底部导航栏 item 的监听应该是 OnNavigationItemSelectedListener,但是该方法已经被 google 官方给废弃了,所以这里用 OnItemSelectedListener 来代替。

qq_44950283的博客 4739

Android实现主界面Tab几种的方式(附带源码)

Android实现主界面Tab几种的方式(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1501

【Android】实现一个优雅的自定义底部导航栏(速通安卓大作业必备)

本篇文章提供了一个实现自定义底部导航栏的示例,能够帮助想要水过安卓大作业实现一个较为优美的底部导航界面,希望对大家有所帮助😘。

weixin_73588491的博客 1万+

Android-底部导航栏(底部Tab)最佳实践,用过的都说香!(1)

除了上面的几种方式之外,还有一种方式来实现底部导航栏,那就是我们通过自定义View来实现,自定义View的好处是我们可以按照我们想要的高度定制,缺点是:比起这些现有的控件还是有点麻烦。下面就通过自定义一个CustomTabView 为例子,来实现一个底部导航栏。CustomTabView 代码下://保存TabView// 保存Tabinit();init();init();init();/**添加Tab。

2401_84538278的博客 1426
上一篇: Carson带你学Android:主流开源图片加载库对比(UIL、Picasso、Glide、Fresco)
下一篇: Carson带你学Android:主流开源网络请求库对比(Volley、OkHttp、Retrofit)
Carson带你学Android
Carson带你学Android 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄11年 1万+粉丝 262原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值