利用Fragment + FragmentTabHost实现书签导航

实现打开Android系统相册、照相机并实现照相,录像功能。 通过本篇博客,你将学到以下知识点: 1.学会如何打开Android系统中相册的图片,视频,并使用这些图片,视频。 2.学会如何打Android开照相机进行照相,录像,并使用这样图片和视频。 下面我将展示两种方法来实现这些需求,注意,以下代码要用真机测试才行。 效果展示先:一. 第一种方法: ①.想顺利的打开Android中的相册和照相机,首先我们要在清单中注册一些权限: <!--使用相机硬 阅读详情

效果展示:
这里写图片描述

FragmentTabHost与RadioGroup的区别:
* 1. FragmentTabHost的代码来说要少。
* 2. FragmentTabHost可扩展性要强。
* 缺点:Fragment界面只能通过书签切换,没有ViewPager

不多说,直接上代码:
1.MainActiviry的代码:

public class Fragment_FragmentTabHost extends AppCompatActivity {
    private FragmentTabHost  tabHost ;
        //准备一些Fragment,设置到布局中。
    private Class[] fragments = new Class[]{Fragment_A.class, Fragment_B.class, Fragment_C.class};
    //准备一些Fragment的数组。设置到.FragmentTabHost中
    private String[] tabText = new String[]{"日程", "发现", "设置"};
    private int[] immageResIds = new int[]{ R.drawable.game,R.drawable.appgroup,R.drawable.home};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_fragment_tabhost);
        tabHost = (FragmentTabHost) findViewById(R.id.tabHost);
        initTabHost();
    }

    private void initTabHost() {
        //步骤一:
        // 参数 1上下文  2 .管理器  3 放置Fragment的容器的id。
        tabHost .setup(this, getSupportFragmentManager(), R.id.fragment_container);
        for (int i = 0; i < fragments.length; i++) {
            //步骤二:
            //创建一个Tab对象
            //newTabSpec:传入tab,用作一个标识
            //setIndicator传入一个View,会显示到tab中
            TabHost.TabSpec tab = tabHost .newTabSpec(tabText[i]).setIndicator(createTabView(i));
            //步骤三:
            //将fragment传入到tabHost中
            //将tab放置到tabHost中
            //将tab和对应的Fragment绑定
            tabHost .addTab(tab, fragments[i], null);
        }
    }
    //方法1.
    private View createTabView(int index) {
        //创建一个tab容器
        LinearLayout tabContainer = new LinearLayout(this);
        //将容器设置的方向设置为竖直的
        tabContainer.setOrientation(LinearLayout.VERTICAL);
        //将容器的子控件设置为居中
        tabContainer.setGravity(Gravity.CENTER);

        ImageView imageview = new ImageView(this);
        imageview.setImageResource(immageResIds[index]);
        //通过addView方法将imageView添加到tabContainer中
        tabContainer.addView(imageview);
        TextView tv = new TextView(this);
        tv.setText(tabText[index]);
        tv.setGravity(Gravity.CENTER);
        //通过addView方法将tv添加到tabContainer中
        tabContainer.addView(tv);
        return tabContainer;
    }

    /*
    * 方法2:通过布局管理器来创建动态View,自己选择一种方法。
    * 
    private View createTabView2(int index) {
        LinearLayout tabContainer = (LinearLayout) getLayoutInflater().inflate(R.layout.tab_item,null);
        ImageView imageView = (ImageView) tabContainer.findViewById(R.id.iv);
        imageView.setImageResource(immageResIds[index]);

        TextView textView = (TextView) findViewById(R.id.tv_name);
        textView.setText(tabText[index]);

        return  tabContainer;

    }
*/

2 . 布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
   <RelativeLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"/>

    <android.support.v4.app.FragmentTabHost
        android:id="@+id/tabHost"
        android:layout_width="match_parent"
        android:layout_height="72dp"/>
</LinearLayout>

3 .创建3个选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/bottombar_game_pressed" android:state_checked="true"/>
    <item android:drawable="@mipmap/bottombar_game_pressed" android:state_selected="true"/>
    <item android:drawable="@mipmap/bottombar_game_normal"/>
</selector>
使用SurfaceView播放视频,调节进度,滑动屏幕调节音量并显示音量。 效果展示: 首先在清单文件中注册: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> java代码: public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { priv 阅读详情

相关推荐

SurfaceView与Canvas的结合实现气泡动态壁纸

效果展示: 其实每个View中都有Canvas可以用来绘制动画,只需要在这个View中重载onDraw()方法就可以,但是SurfaceView类是一个专门用来制动动画的类。Canvas(中文叫做”画布”)就和HTML5中的canvas标签一样可以在一定区域内自由绘制图形。Canvas+SurfaceView制作的动画与View Animation和Property Animation这类动画

用心去专研技术,用代码改变世界__ Mr.Wang 1357

dojo下的TabContainer左侧竖排tab标签

设置tab的属性值data-dojo-props="tabPosition: 'left'"即可

shigk2010的专栏 434

纵向书签式Tab页

Tab页的使用在网页开发时数不胜数,但网络中大多都是横向的,有时需要纵向怎么办,这里分享给大家纵向书签式Tab页,样式美观,实现简单,集成方便,可扩展性强。

Fragment、ViewPager、ActionBar实现TAB导航条效果

 前言:         制作Tab书签导航条(书签选项卡)有多种方法: 【特别提示:】注意几种创建Tab书签导航中Fragment生命周期的变化。 1、TabActivity+TabHost(已经过期) 2、Fragment + FragmentTabHost(取代TabActivity,不建议使用) 3、Fragment + ActionBar                   ...

bobo的博客 403

Materials Studio多层聚合物建模全流程:从Build Layers到LAMMPS data文件导出避坑指南

本文详细解析了使用Materials Studio构建多层聚合物模型并导出为LAMMPS data文件的全流程。重点剖析了Build Layers工具的核心逻辑、真空层处理技巧,并提供了解决导出过程中Z轴坐标偏移问题的实战方案,特别是如何利用msi2lmp工具的-shift参数进行精准校正,确保模型在LAMMPS中模拟的稳定性和准确性。

hhh00的博客 913

中小型微服务系统 硬件设备如何部署,QPS大概多少

作为一名合格的开发工程师,不仅仅要在前期开发阶段对业务和技术有深入了解,知道选用哪种合适的技术,业务如何拆分,还要思考后期线上环境,资源,延迟,性能等如何优化维护以及分布式系统一些线上生产的一些问题。 本篇主要针对之前了解的情况对硬件设备资源做一个简单的介绍: 首先分布式系统线上实践问题,我们应该对公司的流量,各个服务,网管,注册中心应该如何部署,部署多少台机器才合适,每台机器的配置如何,每天整体流量有多少,高峰期的请求量有多少,你的整体系统是否扛得住(注:很多公司现在直接使用K8S docker 实现

wangxuelei036的博客 1万+

21 导航书签一些总结

导航书签: TabHost+Activity 过时 ActionBar+Fragment 不建议使用 ActionBar+Fragment +ViewPager 不建议使用 FragmentTabHost +Fragment 不常使用 步骤: 1. 在布局中的跟标签 改成FragmentTabHost 在里添加容器 2....

weixin_30542079的博客 190

解决vscode无法运行npm命令的问题(cmd可行)

Powershell以及vscode中npm命令使用不了

无痕坚守本心的博客 2749

静态,动态使用Fragment的讲解。

Fragment:是一种可以嵌入在Activity中的 UI 片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板和目前的大屏手机上应用的非常广泛(只要屏幕大,都会用到Fragment)。 下面我们就来看看Fragment静态和动态动态的使用。 一.静态使用Fragment: 把Fragment当成普通的控件,直接写在Activity的布局文件中。 思路: 1:在MainAciti

用心去专研技术,用代码改变世界__ Mr.Wang 4077

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6010

【ChatGPT实战案例】ChatGPT如何帮助产品经理高效工作?

1. 产品经理主要工作方向, 2. 具体工作中,向ChatGPT提问参考

weixin_62909516的博客 1899

Android蓝牙自动配对工具类,亲测好使!!!

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框。 经过最近一段时间得研究,针对网上给出的案例。总结了一个亲测好使的Demo。 说明如下: 1、本Demo用来连接蓝牙设备HC-05,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值。 2、将Demo安装在Android手机上,点击按钮,可以实现与目标蓝牙设备的自动配对。 3、若目标蓝牙

用心去专研技术,用代码改变世界__ Mr.Wang 3820

老司机避坑指南:UC3842自举驱动电路发热严重?这样选C39/C37电容值最稳

本文针对UC3842自举驱动电路发热严重的问题,深入剖析了驱动波形边沿速度与损耗的矛盾根源。通过实测数据与热成像分析,重点阐述了关键电容C39/C37的选型策略,提供了从经验公式到量化计算的优化方法,帮助工程师在发热与效率间找到最佳平衡点,并探讨了分立方案与专用驱动IC的适用场景。

lambda的博客 746

Activity七大生命周期详解

首先,流程图来一张: 介绍生命周期之前,先提一下任务的概念: 任务其实就是activity 的栈,换句话说任务就是” 应用程序” 。 栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity 启动另外一个的时候,新的activity 就被压入栈,并成为当前运行的activity。而前一个activity 仍保持在栈之中。当用户按下BACK

用心去专研技术,用代码改变世界__ Mr.Wang 2152

MediaPipe 从入门到精通:安装、配置与多场景应用实战手册

人体姿态检测是 MediaPipe 的核心功能之一,它能够从图像或视频中识别人体姿态,并输出关键点的坐标。这些关键点覆盖了身体的主要部位,例如肩膀、肘部、髋部、膝盖等,总计 33 个点。每个关键点包含 x、y、z 坐标(归一化到 0-1 范围)以及可见性评分,可用于分析动作、姿势或开发健身、游戏等应用。手部关键点检测是 MediaPipe 的另一大亮点,它可以识别图像或视频中的手部,并输出 21 个关键点的坐标。这些关键点覆盖手掌和手指的各个部位,适用于手势识别、虚拟现实或交互式应用。

m0_71589036的博客 389

减法平均优化器(SABO)算法详解:从数学原理到工程应用

减法平均优化器(SABO)是一种基于数学概念的新型元启发式优化算法,由Trojanovský和Dehghani于2023年提出。该算法通过v-减法运算和平均值计算实现搜索优化,核心创新是采用目标函数值差异符号引导搜索方向。SABO具有参数少、结构简单、收敛快等特点,在高维复杂问题中表现优异。算法通过种群平均值保持多样性,利用符号函数确保搜索方向改进,自然平衡探索与开发。MATLAB实现显示其计算复杂度为O(N²·D),与主流群体智能算法相当。SABO不依赖生物或物理隐喻,数学基础坚实,在工程优化和机器学习领

qq_42212808的博客 164

自定义书签导航

效果展示: 切换后: 实现思路: 1.三个书签其实就是三个TextView,先用shape画出TextView的两种状态,然后用选择器selector去切换TextView的状态。 2.创建三个Fragment,然后使用FragmentPagerAdapter进行适配。 3.三个TextView设置监听方法,当切换TextView时,Fragment也会相应的改变,也可以给三个View

用心去专研技术,用代码改变世界__ Mr.Wang 1769

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用Handler中postDelayed方法实现广告页面无限循环轮播效果

效果展示: 直接上代码: 1.MainActivity的代码:public class MainActivity extends Activity { private ViewPager viewPager; private ImageView[] imageViews; private int COUNT = 4; private Handler mHandler;

用心去专研技术,用代码改变世界__ Mr.Wang 1663

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

阻塞双端消息队列 BlockingDeque(先进先出的原则管理)

既是一个队列的生产者又是这个队列的消费者的时候可以使用到 BlockingDeque。 看图我们之后秒懂了吧,当我们需要把数据发送的对方时,又想有规律均速一条一条的发送,我们就可以这么干了。直接上菜啦: 1. 现在onCreate中启动消息处理器 new HandleMess().start();2 获得BlockingDeque对象 BlockingDeque<byte[]

用心去专研技术,用代码改变世界__ Mr.Wang 1464

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

利用RadioGroup + ViewPager + Fragment实现书签导航

效果展示: 实现思路:1.底部有多少个书签,就创建多少个Feagment。在drawable中绘制选择器selector,也就是底部的书签。 2.初始化数据:找到Fragment对象,Fragment fragmentA = new Fragment_A();把对象加入集合。 3.适配数据:创建一个类,继承FragmentPagerAdapter适配器,把Fragment管理器:g

用心去专研技术,用代码改变世界__ Mr.Wang 1372

框架模式MVC与MVP的区别

MVC和MVP到底有什么区别呢? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 从这幅图可以看到,我们可以看到在MVC里,View是可以直接

用心去专研技术,用代码改变世界__ Mr.Wang 1368

使用AsyncTask异步任务下载数据

1.使用异步任务的原因: ①.android 4.0开始主线程不能执行耗时任务(网络连接,数据库访问,文件的读取)。 不能在主线程执行的原因: android的主线程也叫UI线程,专门响应用户的点击事件等,必须能够快速的响应。 网络连接容易堵塞,UI线程超过5s没有响应用户请求,会弹出无响应关闭对话框提醒用户终止应用程序。 ②子线程不能修改UI,所以就有了异步任务来处理数据。2.同步与异步

用心去专研技术,用代码改变世界__ Mr.Wang 1322

关于性能监控

一.性能监控的作用: 能通过压缩平均恢复时间来减少应用程序的停机时间,或者记录某个应用程序从发生问题到恢复正常,一共花费了多久,并且能够通过检查识别性能瓶颈来提高应用程序性能。IT专家们需要方法来记录分析和改善数据中心性能以及应用程序性能。 二 . 性能监控软件可以从多个来源获得: ①系统厂商工具。许多大型服务器厂商都提供监控工具来支持其产品,同样也包括第三方产品。 ② 第三方工

用心去专研技术,用代码改变世界__ Mr.Wang 1249

利用TabLayout(5.0新技术)+ViewPager+Fragment方法实现书签导航

效果展示: 实现书签导航思路: Fragment + ViewPager + TabLayout(5.0新技术) 效果:顶部有书签Tablayout,点击书签或滑动Fragment, 通过ViewPager可以切换UI界面。比如网易新闻。 1.有多少个书签,就创建多少个Fragment。 2.初始化数据: 找出Fagment的对象,存进集合。 3.适配数据

用心去专研技术,用代码改变世界__ Mr.Wang 1164
上一篇: 利用RadioGroup + ViewPager + Fragment实现书签导航
下一篇: 使用Handler中postDelayed方法实现广告页面轮播效果
Allen-华
博客等级 码龄11年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值