android 顶部标签切换,Android实现底部切换标签

本文实例为大家分享了Android实现底部切换标签的具体代码,供大家参考,具体内容如下

实现底部通用切换标签 ,嵌套Fragment,方便自定义布局

60b43219674e23caeb05a08e58e23525.png

自定义控件:

widget_tab_view.xml

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/tab_image"

android:layout_width="20dp"

android:layout_height="20dp" />

android:id="@+id/tab_label"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#666666"

android:textSize="12sp" />

定义单个标签

public class TabView extends LinearLayout {

private ImageView mTabImage;

private TextView mTabLable;

public TabView(Context context) {

super(context);

initView(context);

}

public TabView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

initView(context);

}

public TabView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initView(context);

}

private void initView(Context context) {

setOrientation(VERTICAL);

setGravity(Gravity.CENTER);

LayoutInflater.from(context).inflate(R.layout.widget_tab_view, this, true);

mTabImage = (ImageView) findViewById(R.id.tab_image);

mTabLable = (TextView) findViewById(R.id.tab_label);

}

public void initData(TabItem tabItem) {

mTabImage.setImageResource(tabItem.imageResId);

mTabLable.setText(tabItem.lableResId);

}

}

定义单个标签的entity

public class TabItem {

public int imageResId;

public int lableResId;

public Class extends Fragment> tagFragmentClz;

public TabItem(int imageResId, int lableResId) {

this.imageResId = imageResId;

this.lableResId = lableResId;

}

public TabItem(int imageResId, int lableResId, Class extends Fragment> tagFragmentClz) {

this.imageResId = imageResId;

this.lableResId = lableResId;

this.tagFragmentClz = tagFragmentClz;

}

}

定义底部切换标签控件

public class BottomTabLayout extends LinearLayout implements View.OnClickListener {

private ArrayList tabs;

private OnTabClickListener listener;

private int tabCount;

private View selectedView;

public BottomTabLayout(Context context) {

super(context);

initView();

}

public BottomTabLayout(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

initView();

}

public BottomTabLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initView();

}

private void initView() {

setOrientation(HORIZONTAL);

}

public void setCurrentTab(int i) {

if (i < tabCount && i >= 0) {

View view = getChildAt(i);

onClick(view);

}

}

public void initData(ArrayList tabs, OnTabClickListener listener) {

this.tabs = tabs;

this.listener = listener;

LayoutParams params = new LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT);

params.weight = 1;

params.gravity = Gravity.CENTER;

if (tabs != null && tabs.size() > 0) {

tabCount = tabs.size();

TabView mTabView = null;

for (int i = 0, len = tabs.size(); i < len; i++) {

mTabView = new TabView(getContext());

mTabView.setTag(tabs.get(i));

mTabView.initData(tabs.get(i));

mTabView.setOnClickListener(this);

addView(mTabView, params);

}

} else {

throw new IllegalArgumentException("tabs can not be empty");

}

}

@Override

public void onClick(View view) {

if (selectedView != view) {

listener.onTabClick((TabItem) view.getTag());

view.setSelected(true);

if (selectedView != null) {

selectedView.setSelected(false);

}

selectedView = view;

}

}

public interface OnTabClickListener {

void onTabClick(TabItem tabItem);

}

}

Activity

public class MainActivity extends AppCompatActivity implements BottomTabLayout.OnTabClickListener {

private BottomTabLayout tab_layout;

private ArrayList tabs;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

setTitle("底部切换标签");

tab_layout = (BottomTabLayout) findViewById(R.id.tab_layout);

initBottomTab();

tab_layout.setCurrentTab(0);

}

private void initBottomTab() {

tabs = new ArrayList<>();

tabs.add(new TabItem(R.drawable.selector_tab_msg, R.string.wechat, OneFragment.class));

tabs.add(new TabItem(R.drawable.selector_tab_contact, R.string.contacts, TwoFragment.class));

tabs.add(new TabItem(R.drawable.selector_tab_moments, R.string.discover, ThreeFragment.class));

tabs.add(new TabItem(R.drawable.selector_tab_profile, R.string.me, FourFragment.class));

tab_layout.initData(tabs, this);

}

private Fragment lastFragment;

@Override

public void onTabClick(TabItem tabItem) {

try {

Fragment tmpFragment = getSupportFragmentManager().findFragmentByTag(tabItem.tagFragmentClz.getSimpleName());

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

if (tmpFragment == null) {

tmpFragment = tabItem.tagFragmentClz.newInstance();

transaction.add(R.id.fl_container, tmpFragment, tabItem.tagFragmentClz.getSimpleName());

if (lastFragment != null) {

transaction.hide(lastFragment);

}

transaction.commitAllowingStateLoss();

} else {

transaction.show(tmpFragment);

if (lastFragment != null) {

transaction.hide(lastFragment);

}

transaction.commitAllowingStateLoss();

}

lastFragment = tmpFragment;

} catch (Exception e) {

e.printStackTrace();

}

}

}

布局文件

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.sample.bottomtab.MainActivity">

android:id="@+id/fl_container"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:background="#ffffff" />

android:layout_width="match_parent"

android:layout_height="1dp"

android:background="#dcdcdc" />

android:id="@+id/tab_layout"

android:layout_width="match_parent"

android:layout_height="48dp"

android:background="#ffffff" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

simulink显示多个数据_Matlab/Simulink与自动驾驶(ADAS)算法开发

Simulink是如何存在自动驾驶的开发过程中&#xff1f;废话少讲&#xff0c;让咱们开始娓娓道来&#xff01;自动驾驶的开发架构是什么&#xff1f;自动驾驶软件开发基础的架构&#xff0c;逃不出我们经常所说的三大法宝&#xff0c;感知--- 决策(规划)--- 执行(控制)&#xff0…

数字孪生智慧城市建设加速5G+产业AI的应用,全流程数据透明化及实时可控成为升级的大方向,构建智慧城市生态圈在路上!...

本视频为深圳市副市长和IDG领导在高交会智慧城市论坛上的讲话。来源&#xff1a;北京物联网智能技术应用协会 本期正文Digital Twin数字孪生&#xff1a;是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0…

Linux部署Apache ActiveMQ 5.14.1

Linux部署Apache ActiveMQ 5.14.1 简单记一下&#xff0c;下载地址 http://activemq.apache.org/download.html 一、安装JDK7以上&#xff0c;官方说明&#xff1a;http://activemq.apache.org/version-5-getting-started.html 二、创建目录&#xff1a; cd /usrmkdir activemq…

python做excel表格柱状图_Python Excel 绘制柱形图

原博文 2019-11-19 22:07 − 本文主要讲述如何使用Python操作Excel绘制柱形图。 相关代码请参考 https://github.com/RustFisher/python-playground 本文链接&#xff1a;https://www.rustfisher.com/2019/11/19/Python/Python-op-ex... 相关推荐 2019-12-08 20:02 − 利用Pyth…

管理口地址 ibm_WAN口有IP地址上不了网如何解决 WAN口有IP地址上不了网解决方法【详解】...

设置好路由器WAN口PPPoE拨号后&#xff0c;WAN口状态已经显示获得到IP地址&#xff0c;如下图&#xff1a;WAN口有IP地址上不了网怎么办但是终端设备连接路由器无法上网&#xff0c;请参考以下步骤排查。电脑需要设置为自动获得IP地址&#xff0c;如果您不清楚如何设置&#xf…

IBM 消费者洞察报告,揭示 5G 娱乐时代的三大关键趋势

来源&#xff1a;IBM中国 5G 时代来临&#xff0c;三大变革力量的出现&#xff0c;注定让“传统媒体”彻底无眠。消费者对 5G 技术兴趣盎然 5G 为消费者带来的最重要好处是能够提升移动视频流的质量&#xff0c;最终转向超高清 (UHD) 格式。 沉浸式媒体吸引了消费者的浓厚兴趣 …

什么时候需要coinitialize_机器学习模型什么时候需要做数据标准化?

机器学习Author&#xff1a;louwillMachine Learning Lab一直都有朋友在做机器学习模型时有疑问&#xff1a;我的数据要不要做标准化处理&#xff1f;这个问题笔者也思考过&#xff0c;只不过不够系统&#xff0c;观点也比较单一&#xff0c;所以才有了上图中的【变量单位之间数…

Android fragmnet标签,在Android中为Fragment添加标签?

我试图在Fragment中添加一个TabHost。代码如下。这里里面的Fragment。我试图添加TabHost显示两个标签&#xff1a;package com.nordicsoft.dilosysNewVersion;import android.app.Fragment;import android.content.Intent;import android.os.Bundle;import android.view.Layout…

编程题走迷宫_C++程序算法题----迷宫(一)

题目&#xff1a;一天蒜头君掉进了一个迷宫里面&#xff0c;蒜头君想逃出去&#xff0c;可怜的蒜头君连迷宫是否有能逃出去的路都不知道。看在蒜头君这么可怜的份上&#xff0c;就请聪明的你告诉蒜头君是否有可以逃出去的路。输入格式第一行输入两个整数 n和 m&#xff0c;表示…

python中paramiko模块的使用

paramiko是python一个模块&#xff0c;遵循SSH2协议&#xff0c;支持以加密和认证的方式&#xff0c;进行远程服务器的连接1、可以远程操作服务器文件 例如&#xff1a; df&#xff1a;查看磁盘使用情况 mkdir&#xff1a;创建目录 mv/cp/mkdir/rmdir:对文件或目录进行操作 /sb…

机器人与人工智能: 应对全球挑战的终极途径

来源&#xff1a;中国指挥与控制学会欧洲机器人协会主席伯纳德利珀特&#xff08;Bernd Liepert&#xff09;近日在2019 世界机器人大会上透露&#xff0c;未来产业界将在欧洲机器协会的项目中发挥领导作用&#xff0c;欧盟正在推动一个2021 年至2027 年的新项目&#xff0c;总…

6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时

一、分布式系统带来ID生成挑战在分布式系统中&#xff0c;往往需要对大量的数据如订单、账户进行标识&#xff0c;以一个有意义的有序的序列号来作为全局唯一的ID。而分布式系统中我们对ID生成器要求又有哪些呢?全局唯一性&#xff1a;不能出现重复的ID号&#xff0c;既然是唯…

android壁纸居中,Android Launcher 如何实现壁纸居中

前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载&#xff0c;但请保留文章原始出处&#xff1a;CSDN&#xff1a;http://www.csdn.net雨季o莫忧离&#xff1a;http://blog.csdn.net/luckkof正文KK Launcher3的wallpaper显示是动态的&#xff0c;与Launc…

django外调用url_Django url

三 分组命名匹配上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。在更高级的用法中&#xff0c;可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。在Python的正则表达式中&#xff0c;分组命名…

css在盒子中垂直居中和固定居中

顶部固定居中 <div class"w960 fixed">我是固定的</div>.w960{ width: 960px; margin:0 auto; } .fixed{ position: absolute; top:0; left: 0; right: 0; height: 90px; background: #ececec; } 垂直居中 <div id"box"><div class&q…

数据库的前世今生

译者 | 谭开朗编辑 | 屠敏来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【CSDN 编者按】被称之为基础软件三驾马车之一的数据库&#xff0c;在经历了层次型和网状型、关系型数据型库以及更加强大的数据管理功能等三个时期之后&#xff0c;其在未来的发展历程中还…

python常用算法有哪些_python常见的排序算法有哪些?

大家都知道&#xff0c;关于python的算法有很多&#xff0c;其中最为复杂的就是python的排序算法&#xff0c;因为它并不是单一的&#xff0c;而是复杂的&#xff0c;关于排序算法就有好几种不同的方式&#xff0c;大家可以根据以下内容&#xff0c;结合自己的项目需求&#xf…

android app links,Android APP Links 配置

一. 简介在Instant App开发中&#xff0c;需要app支持Instant App Links. 本文中&#xff0c;主要介绍其作用&#xff0c;配置必需条件&#xff0c;配置的过程。二. 作用App Links 本质上是 Deep Link 的一种延伸&#xff0c;我们知道&#xff0c;Deep Link配置在Manifest之后&…

adnroid 打包问题 :compileReleaseJavaWithJavac

今天打包的时候&#xff0c;由于着急。改了些本地的变化就assembleRelease. 然后就报错&#xff1a; compileReleaseJavaWithJavac 后来网上乱找&#xff0c;。。。。 之后我想到先跑一下&#xff0c;果然是因为少一个字符串。 所以&#xff0c;以后打包的时候&#xff0c;…

联想e480一键恢复小孔_联想电脑如何一键恢复系统

联想电脑的一键还原系统在需要使用的时候直接按下一键还原按键即可&#xff0c;那么大家知道吗?今天小编与大家分享下联想电脑系统恢复的具体操作步骤&#xff0c;有兴趣的朋友不妨了解下。联想电脑系统恢复方法重要提醒&#xff1a;在您做一键恢复到出厂设置前&#xff0c;请…