前言

在前面的博客写到我针对一个项目完成了动态布局的效果,顿时感觉很爽,那么下面我针对我在前文中所讲的tabhost的实现做出一个新的方法,tabhost基本已经被启用,现在基本使用Fragment与viewpage进行实现相同的功能,在园子里有很多这样的博客,现在我在这里呢,继续是参考了一些博客进行了一些总结!

原因:在加载过程中,你会发现使用tabhost的内存资源比fragment大得多,因此我没有很多的安卓的截图的原因在于我一直使用真机做开发,这样虽然在博客园上很少能够图文并茂,但也使开发的安卓软件是真实可靠的,当然我没有任何对使用虚拟机开发的人有任何意见。

特别是现在我完全使用android studio进行开发,虽然这个IDE,我自己也不太熟悉,但是使用这个IDE还是相当之方便的!还能看内存的使用情况

Fragment简介

好了,回归正途了,我们今天要讨论的是传说中Fragment,这玩意可以做好多事,就像我们的Activity一样,只要继承这个类就能激发其各种能力!说说Fragment的实质吧

Fragment自Android3.0引入的API,可以将其看作是Activity的子模块,其英文翻译是就是片段的意思!

使用fragment的布局文件

main_activity.xml

在这里,我需要规定我使用的viewpage的局域与我使用的相当于tabhost的按键布局文件

   <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"
tools:context=".MainActivity"
android:background="#f0f3f5"
android:orientation="vertical"
> <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
>
</android.support.v4.view.ViewPager>
<include layout="@layout/bottom"
/>
</LinearLayout>

include layout="@layout/bottom"表示我包含了一个叫bottom的layout文件

先看这个布局的效果图!

在这里,我们可以知道上面的

那么bottom这个文件咋么写呢?在这里我还更改了button的样式,让页面更加好看!

   <?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="98px"
android:orientation="horizontal"
android:layout_gravity="center"
android:background="#ffffff"
android:layout_alignParentBottom="true"
android:id="@+id/tab"
>
<LinearLayout
android:id="@+id/tab_home"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
android:clickable="true" >
<RadioButton
android:gravity="center"
android:id="@+id/btnhometab"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/Widget.AppCompat.ActionButton"
android:checked="true"
android:button="@null"
android:text="首页"
android:textSize="10sp"
android:drawableTop="@drawable/tab_home"
android:textColor="@drawable/tab_text_color"
android:clickable="false"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/tab_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
android:clickable="true"
>
<RadioButton
android:gravity="center"
android:id="@+id/btnactivitytab"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/Widget.AppCompat.ActionButton"
android:checked="true"
android:button="@null"
android:text="活动"
android:textSize="10sp"
android:drawableTop="@drawable/tab_activity"
android:textColor="@drawable/tab_text_color"
android:clickable="false"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/tab_me"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
android:clickable="true"
>
<RadioButton
android:gravity="center"
android:id="@+id/btnmetab"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/Widget.AppCompat.ActionButton"
android:checked="true"
android:button="@null"
android:text="我"
android:textSize="10sp"
android:drawableTop="@drawable/tab_me"
android:textColor="@drawable/tab_text_color"
android:clickable="false"
/>
</LinearLayout>
</LinearLayout>

我们来看一下效果图:

在这里我们可以看到我将button的styke样式改成了actionButton样式,当然,还有一点要注意的是我将linearout做为了点击事件,而底下的radiobutton使之触发效果失效(android:clickable="false")这样可以使没点到图片只要在这个区域内便可以实现点击事件在textcolor这个属性我又设置了

fragment配合viewpage实现tabhost外加活动功能!

我们先来看一下我所相匹配的mainactivity文件

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.RadioButton; import java.util.ArrayList;
import java.util.List; public class MainActivity extends android.support.v4.app.FragmentActivity { /******
*各类声明
*/
private ViewPager viewPager; private FragmentPagerAdapter pagerAdapter;
private List<Fragment> fragments; private LinearLayout homeTab;
private LinearLayout activityTab;
private LinearLayout meTab; private RadioButton homeRbtn;
private RadioButton activityRbtn;
private RadioButton meRbtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
GetView();//你可以先将其注释掉
initView();
initEvent();
setSelect(0);
}
/*****
* 动态布局实现 请参考我写的动态布局
*/
private void GetView(){
Autosize autosize = new Autosize();
// 获取实际的屏幕宽度
autosize.setScreensize(autosize.Metricwidth(this));
LinearLayout bottom = (LinearLayout) findViewById(R.id.tab);
autosize.llinearlayoutheight(98,bottom);
}
/******
* famage 处理
*
*/
private void initView() { viewPager = (ViewPager) findViewById(R.id.viewpager); //bottom的tab linearlayout id
homeTab = (LinearLayout) findViewById(R.id.tab_home);
activityTab = (LinearLayout) findViewById(R.id.tab_activity);
meTab = (LinearLayout) findViewById(R.id.tab_me); homeRbtn = (RadioButton) findViewById(R.id.btnhometab);
activityRbtn = (RadioButton) findViewById(R.id.btnactivitytab);
meRbtn = (RadioButton) findViewById(R.id.btnmetab); fragments = new ArrayList<Fragment>();
//添加tab
fragments.add(new FragmentHome());
fragments.add(new FragmentActivity());
fragments.add(new FragmentMe());
//相应的适配器
pagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override
public android.support.v4.app.Fragment getItem(int position) {
return fragments.get(position);
} @Override
public int getCount() {
return fragments.size();
}
};
// 绑定适配器
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
int currentItem = viewPager.getCurrentItem();
setTab(currentItem);
} @Override
public void onPageScrollStateChanged(int state) {
}
});
}
//设置事件
private void initEvent(){
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tab_home:
setSelect(0);
break;
case R.id.tab_activity:
setSelect(1);
break;
case R.id.tab_me:
setSelect(2);
break;
default:
break; }
}
};
homeTab.setOnClickListener(listener);
activityTab.setOnClickListener(listener);
meTab.setOnClickListener(listener); } private void setTab(int i){
resetbtn();
// 切换内容区域
switch (i)
{
case 0:
homeRbtn.setChecked(true);
break;
case 1:
activityRbtn.setChecked(true);
break;
case 2:
meRbtn.setChecked(true);
break;
} }
private void setSelect(int i){
viewPager.setCurrentItem(i);
setTab(i);
} private void resetbtn(){
homeRbtn.setChecked(false);
activityRbtn.setChecked(false);
meRbtn.setChecked(false);
} }

相信大家对此有了一定的了解,我是通过radiobutton的不同状态来确定更改的颜色的!

tab_text_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="#64c32f"/>
<!-- not selected -->
<item android:state_checked="false" android:color="#000000"/>
</selector>

tab_me.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_checked="false"
android:drawable="@drawable/firsttab2"/>
<item
android:state_checked="true"
android:drawable="@drawable/firsttab" />
</selector>

通过这两个xml文件,我做了相应的效果!

后记

后面我将写一篇有关百度定位最新版本的使用博客,如果你喜欢我写的博客呢!求关注!

android开发学习笔记系列(5)--fragment与viewpage的更多相关文章

  1. android开发学习笔记系列(1)-android起航

    前言 在学习安卓的过程中,我觉得非常有必要将自己所学的东西进行整理,因为每每当我知道我应该是如何去实现功能的时候,有许多细节问题我总是会遗漏,因此我也萌生了写一系列博客来描述自己学习的路线,让我的an ...

  2. android开发学习笔记系列(2)-android应用界面编程

    前言 本篇博客将会简要介绍andriod开发过程中的一些界面元素和编程的实现,我将大家走进安卓的XML世界,当然可能会涉及到java代码,当然本文主要是介绍XML文件的界面布局. 那么我们的XML存在 ...

  3. android开发学习笔记系列(4)--android动态布局

    前言 在做一个有关苏果APP的项目中,但是fuck的是,我完全使用相对布局之后及线性布局之后发现坑爹的事情了,屏幕不能适配,这是多大的痛,意味着,必须使用相应的代码实现动态布局!呵呵,不做项目不知道, ...

  4. android开发学习笔记系列(6)--代码规范

    在开发android的时候,我对自己写的代码很是不满,原因在于自己看到别人的代码,很是头痛,原因很简单,别人写的代码,我就要去猜他的意思,极其烦恼,嗯,就是他没有遵循代码规范,因此我在博客园上寻找一篇 ...

  5. android开发学习笔记系列(3)--ScrollView与HorizontalScrollView

    ScrollView与HorizontalScrollView 这是一个滚动视图,就是说如果你在你的UI中容不下那么多的内容,且你对自己的UI都已经设置好了px,OK,那么在适应屏幕过程中,我们并不希 ...

  6. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  7. 步步为营 SharePoint 开发学习笔记系列总结

    转:http://www.cnblogs.com/springyangwc/archive/2011/08/03/2126763.html 概要 为时20多天的sharepoint开发学习笔记系列终于 ...

  8. 【转】Android开发学习笔记(一)——初识Android

    对于一名程序员来说,“自顶向下”虽然是一种最普通不过的分析问题和解决问题的方式,但其却是简单且较为有效的一种.所以,将其应用到Android的学习中来,不至于将自己的冲动演变为一种盲目和不知所措. 根 ...

  9. Android开发学习笔记DDMS的使用

    打开DDMS DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务. DDMS里面包含了:Device(设备) F ...

随机推荐

  1. poj2186tarjan算法缩点求出度

    poj2186tarjan算法缩点求出度 自己打一遍第一题,入门啦,入门啦 题目还算简单,多头牛,给你仰慕关系(可传递),问你最后有没有牛被所有的牛仰慕 根据关系可以建图,利用tarjan算法缩点处理 ...

  2. js五道经典练习题--第二道仿qq聊天框

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  3. mysql变更数据的捕获和入库

    问题:涉及状态的信息,mysql中是update的,缺少中间状态的记录.数据分析中需要这部分数据. 思路:后端服务通过监控某张表的某个字段,根据mysql的binlog文件,还原数据,发送到kafka ...

  4. ASP.NET Web API 框架研究 ASP.NET Web API 路由

    ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...

  5. Python自动化开发 - 面向对象(一)

    本节内容 1.编程范式 面向过程编程 面向对象编程 2.面向对象编程介绍 类的语法 类与实例内存分配 构造方法 自定义方法 3.面向对象特性 一.编程范式 编程是程序员 用特定的语法+数据结构+算法组 ...

  6. DXP快捷键记录(红色为经常用到的)

    dxp快捷键 1.设计浏览器快捷键:鼠标左击                         选择鼠标位置的文档鼠标双击                         编辑鼠标位置的文档鼠标右击   ...

  7. C#导入Excel数据常见问题

    今天在做一个excle数据导入的时候遇到了一个奇葩问题,项目使用的是MVC,在VS2010里面调试的时候没有问题,可是当发布到本地IIS或服务器上时就出现了问题: 1.excel文件正在被使用: 2. ...

  8. Asp.Net MVC记住用户登录信息 下次登录无需输入密码

    有的时候做网站,就需要记住用户登录信息,下次再登录网站时,不用重复输入用户名和密码,原理是浏览器的cookie把状态给记住了! 那么具体是怎么实现的呢?下面博主将一部分代码贴出来,想要完整版的Demo ...

  9. 杀掉所有 skynet 进程

    ps aux | grep skynet | awk '/config/{print $2}' | xargs kill

  10. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...