使用 TabLayout android 实现不同大小的选项卡

2024-03-10

尝试重新创建与 Instagram 相同的顶部 TabLayout。

主选项卡:

侧边标签:

尝试过多种方法:

  • 应用程序:tabMode =“固定”
  • 应用程序:tabMode =“可滚动”

我设法以编程方式创建它,如下所示:

View view1 = getLayoutInflater().inflate(R.layout.customtab, null);
view1.findViewById(R.id.icon).setBackgroundResource(R.drawable.my1);
tabLayout.addTab(tabLayout.newTab().setCustomView(view1));


View view2 = getLayoutInflater().inflate(R.layout.customtab, null);
view2.findViewById(R.id.icon).setBackgroundResource(R.drawable.my2);
tabLayout.addTab(tabLayout.newTab().setCustomView(view2));


View view3 = getLayoutInflater().inflate(R.layout.customtab, null);
view3.findViewById(R.id.icon).setBackgroundResource(R.drawable.my3);
tabLayout.addTab(tabLayout.newTab().setCustomView(view3));

center_tab.xml:

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

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:id="@+id/icon"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

side_tabs.xml:

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

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:id="@+id/icon"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

但在 setupWithViewPager([MY PAGE ADAPTER]) 之后,视图完全改变了。

如何将 ViewPager 和 TabLayout 与不同大小的选项卡一起使用?


找到了解决方案 - 所有需要做的就是在 TabLayout 和页面适配器之间手动连接,如下所示:

 mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        mViewPager.addOnPageChangeListener(
                new ViewPager.SimpleOnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        TabLayout.Tab tab = tabLayout.getTabAt(position);
                        tab.select();

                    }
                });


        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                mViewPager.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
        });

        View view1 = getLayoutInflater().inflate(R.layout.side, null);

        tabLayout.addTab(tabLayout.newTab().setCustomView(view1));


        View view2 = getLayoutInflater().inflate(R.layout.center, null);

        tabLayout.addTab(tabLayout.newTab().setCustomView(view2));


        View view3 = getLayoutInflater().inflate(R.layout.side, null);

        tabLayout.addTab(tabLayout.newTab().setCustomView(view3));

side.xml:

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

    <ImageView
        android:id="@+id/bla"
        android:layout_width="30dp"
        android:src="@mipmap/ic_launcher"
        android:layout_height="wrap_content" />

</LinearLayout>

中心.xml:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <View
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_weight="1"
        android:id="@+id/view" />

    <ImageView
        android:id="@+id/bla"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>

    <View
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_weight="1"
        android:id="@+id/view2" />

    </LinearLayout>


</LinearLayout>

并且不使用 tabLayout.setupWithViewPager([MY PAGE ADAPTER])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TabLayout android 实现不同大小的选项卡 的相关文章

  • 如何使用 WifiEnterpriseConfig 设置“使用系统证书”

    我想为我的应用程序的用户配置企业 WiFi 网络 因此 用户必须输入用户名和密码 其余的由应用程序处理 身份验证由 RADIUS 服务器 FreeRadius 3 处理 该服务器使用 LetsEncrypt 颁发的证书 因此无需导入我自己的
  • 将JSON数据解析到Android ListView中

    我已经潜伏这个网站很长一段时间了 幸运的是 到目前为止我所有的问题都得到了解答 我希望你们中的一些人能够阐明我的问题 我可以成功地让 ListView 来显示字符串数组 但是当我尝试将 JSON 数据解析为数组时 我的程序只是强制关闭 而
  • 使用busybox在后台安装apk

    我可以在 root 设备上使用 busybox 在后台安装 apk 吗 我看到类似的东西 但它不起作用 process install CommandCapture command new CommandCapture 0 chmod 77
  • app-release-unsigned.apk 未签名

    我在 github 上下载了 Android 应用程序的 zip 文件 并尝试运行它 但出现一个包含此消息的对话框 app release unsigned apk is not signed Please configure the si
  • 在新的菜单提供程序 API 弃用“setHasOptionsMenu”后,隐藏 Fragment 中的菜单项并在导航返回上再次显示它们

    大约一个月前 Android 团队弃用了onCreateOptionsMenu and onOptionsItemSelected 也setHasOptionsItemMenu 不幸的是 这破坏了我所有的代码 我的应用程序有很多片段 当用户
  • Android:如何让设备只运行一个应用程序?

    我有一个客户项目 我必须制作单任务 Android 设备 客户无法逃脱我公司开发的应用程序 此外 客户无法启动任何其他应用程序 而我们的应用程序会在设备启动时启动 总体而言 客户能够使用设备执行的所有操作就是运行我们的应用程序 除了 roo
  • 如何在 Picasso 中使用磁盘缓存?

    我正在使用 Picasso 在我的 Android 应用程序中显示图像 load image This is within a activity so this context is activity public void loadIma
  • Android 片段之间的阴影分隔符

    我有一个类似于平板电脑的 ICS Gmail 应用程序的布局 ListFragment左边是内容 右边是内容 我想知道如何构建布局 使两个片段之间有一个阴影分隔符 就像在 Gmail 应用程序中一样 如下所示 另外 由于这适用于这个问题 我
  • 如何在Android中访问现有的sqlite数据库?

    到目前为止 我们已经在 Android 中开发了在运行时创建数据库的应用程序 我们想知道如何在 Android 应用程序中访问预构建或现有的数据库 sqlite 文件 请提供详细信息 查看文档android database sqlite
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 作为附件的 Android 设备

    我有 2 个 Android 设备 我想用 USB OTG 电缆连接它们 并在两个设备之间进行来回通信 据我了解 一台 Android 设备将充当 USB 主机 运行 4 4 的 Nexus 7 另一台 Android 设备将充当 USB
  • 如何在其他呼叫运行时以编程方式合并呼叫(电话会议)

    我的要求是这样的 假设我当时正在拨打一个号码 并且我想以编程方式拨打另一个号码 到目前为止 我所做的是 当某些呼叫已经进行时 我能够呼叫特定号码 例如 假设我正在拨打号码 123 1 分钟后 通过使用Alarm Manger我触发一个事件来
  • Android Studio 安装失败,APK 未签名

    最近从 Eclipse 更改为 Android Studio 我还更改了 JDKjava open jdk to jdk1 7 0 45 现在我尝试运行我的第一个应用程序 并收到以下消息 Installation failed since
  • Android:如果任务管理器终止,则重新调用应用程序

    如果应用程序线程被任务管理器杀死 则应用程序线程将关闭 需要重新调用应用程序 就像它被其他应用程序或任务管理器杀死一样 任何想法 您必须使用 START STICKY 命令运行后台服务 只需扩展 Service 并重写 onCommand
  • Android 媒体播放器搜索栏

    我有一个创建 播放和处理媒体播放器 只是音频 的服务 但我在主要活动中有一个搜索栏 我想自然地显示音频文件的进度并允许用户搜索到不同的位置 我花了很长时间才弄清楚 将 UI 中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么 我将这样
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • Android Jetpack Compose 尺寸随持续时间变化的动画

    如何在 Jetpack Compose 中添加内容大小更改动画的持续时间 尝试使用Modifier animateContentSize 并通过动画规格具有持续时间 但它只是突然进入或退出 没有观察到持续时间 Column Modifier
  • Android Volley - 发布请求 - 无法在线工作

    我试图通过 Volley 发出 POST 请求 它在我的本地主机中工作得很好 但是当我将它移动到网络服务器时 响应为空 Java代码 RequestQueue queue Volley newRequestQueue this String
  • 如何减少 Android 中浮动 editText 提示和 editText 框之间的空间?

    我有一个带有浮动提示的 EditText 但我想知道如何减少浮动提示和 EditText 框之间的空间 现在我的用户界面看起来像https i stack imgur com ltfra jpg https i stack imgur co

随机推荐

  • 使用专用网络从 Google Compute Engine 访问 Google Cloud SQL

    是否可以使用专用网络从 Google Compute Engine 访问 Google Cloud SQL Google Cloud SQL 似乎看到了 Google Compute Engine 实例的公共网络 IP 并且 Web 控制台
  • 在 React JS 中使用颜色控制时的警告

    我将 React JS 与 Babel 和 Webpack 一起使用 一切都与我的其他脚本 甚至使用颜色模块的脚本 一起正常工作 但是 我的脚本之一给了我以下错误 指定的值 不符合要求的格式 这 格式为 rrggbb 其中 rr gg bb
  • 无法更新 Xamarin for Visual Studio

    我最近不得不重新安装我的电脑 我重新安装了VS2015 Community 然后我从 www xamarin com download 安装了 Xamarin 每当我打开 Visual Studio 时都会收到以下通知 尽管当我点击它时什么
  • remove() 方法太慢

    我在读取内存痕迹时遇到问题 我已阅读它并将页面及其参考保存在地图上 地图结构 Map
  • 排序比较计数器

    我有这段代码 可以对填充有随机数的数组进行排序 并计算完成排序所需的数字比较 我正在使用排序方法选择冒泡和合并排序 我有选择和气泡的计数器 但没有合并的计数器 我不知道把它放在哪里 这可能是一个简单的答案 但我就是无法让它发挥作用 Code
  • 使用 Winforms 应用程序部署 SQL Server 数据库

    我创建了一个基于 SQL DB 的 winforms 应用程序 我想将其部署在客户端计算机上 该程序是单用户桌面应用程序 意见于this https stackoverflow com questions 1813241 how to de
  • GitHub 从之前的提交中分叉了一个存储库

    我在 GitHub 上找到了一个存储库 我想分叉 但不是当前版本 我想分叉该存储库 因为它有相当多的提交回来 这可能吗 该存储库尚未标记任何版本 因此我不确定如何执行此操作 显然 我可以复制该提交中的代码 但我更愿意分叉 因为这样我就可以将
  • HBase 上的 Thrift 有性能基准吗?

    我有一个可以将大量数据写入 hbase 的系统 系统是用c 编写的 发现hbase有其他语言的thrift接口 我的问题是 HBase 上的 Thrift 有性能基准吗 与java原生api相比 最劣势是什么 我推荐最近关于这个主题的两篇博
  • PS 脚本正在导出空的 CSV

    我花了很长时间试图理解为什么这个脚本没有按预期工作 这是一个简单的脚本 我尝试在其中导入 CSV 选择我想要的几列 然后导出 CSV 并复制自身 基本上 我们已经存档了数据 由于内存大小限制 我只需要从另一个项目中获取几列 这个脚本非常简单
  • 在 Android Studio 上将模块或项目导入为库

    我想在我的动态壁纸项目中使用 HoloEverywhere HE Preferences AddOn 该项目即将完成 我只需要它从 android 2 3 到 4 4 看起来相同 所以我继续按照指南从 GitHub 获取 HE 在 Demo
  • 水豚无法使用 action_cable

    我正在使用带有操作电缆的 Rails 5 beta 3 集成在开发中运行良好 但是当我尝试通过水豚运行功能测试时 它似乎没有命中通道操作 我正在使用 Portergeist 并将 puma 配置为水豚的服务器 我还使用 es5 shim 和
  • 在 Windows 上调试时 stderr 去了哪里?

    当尝试在 Windows 上调试程序时 我似乎无法找到推送到 stderr 的输出的去向 如何获取 stderr 输出 是否可以更改调试器级别设置 MSVC 9 以将 stderr 重定向到 UI 的某些部分 更新 我还没有研究过TRACE
  • 在 Android 类相机中将自动对焦放在哪里

    我正在尝试使用自动对焦 我不知道在哪里放置自动对焦 有人知道如何实现自动对焦吗 预习班 package com marakana import java io IOException import android content Conte
  • 使用 Auth 获取数据透视表中用户的角色

    我有以下数据库结构 使用数据透视表连接用户和角色表 用户表包含所有信息 例如电子邮件和密码 而角色表定义不同的角色 角色表 1 gt 管理员 2 gt 编码器 3 gt 推销员 4 gt 技术 现在角色被定义为多对多 因为有一些编码器也被分
  • 从哪里可以获得 libpq 源代码?

    我想编写使用 Postgresql 作为 DBMS 的应用程序 要编写客户端应用程序 我需要 libpq 库和头文件吗 如果是的话我会在哪里获得 libpq 库和头文件 Libpq 包含在完整的 PostgreSQL 源代码中 您可以只使用
  • Java NIO ByteBuffer,翻转后写入

    我是 Java ByteBuffers 的新手 想知道翻转后写入 ByteBuffer 的正确方法是什么 在我的用例中 我将一个输出缓冲区写入套接字 outBuffer flip Non blocking SocketChannel int
  • 使用不带 src 属性的 vuejs 在 iframe 中渲染组件

    我想在这个 iframe 中渲染组件 是否有在 iframe 中创建 html 元素或渲染组件的选项 new Vue el frame store store router router render component 对我来说最简单的方
  • 本地化 Angular Material 日期选择器中的日期值

    我正在使用 Angular Material 日期选择器 我的问题是 当我向 Web Api 控制器发送日期时 我得到的日期小于我在表单中选择的日期 我认为这是因为日期值没有本地化 我想知道的是如何localize the date in
  • 嵌套 JSF 复合组件导致堆栈溢出异常

    问题 当我尝试将复合组件嵌套在其自身中 并使用一些逻辑来结束无限递归时 我收到堆栈溢出异常 我的理解是
  • 使用 TabLayout android 实现不同大小的选项卡

    尝试重新创建与 Instagram 相同的顶部 TabLayout 主选项卡 侧边标签 尝试过多种方法 应用程序 tabMode 固定 应用程序 tabMode 可滚动 我设法以编程方式创建它 如下所示 View view1 getLayo