【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏_第1页
【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏_第2页
【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏_第3页
【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏_第4页
【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在Fragment中使用ViewPager实现一个底部导航栏

本篇文章为大家展示了怎么在Fragment中使用ViewPager实现一个底部导航栏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<RelativeLayout

xmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@color/theme_color"

android:clipToPadding="true"

android:fitsSystemWindows="true"

>

<include

android:id="@+id/actionbar_activity_main"

layout="@layout/actionbar"

/>

<RelativeLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_below="@id/actionbar_activity_main"

android:background="@color/white"

>

<RadioGroup

android:id="@+id/rg_menu_activity_main"

android:layout_width="fill_parent"

android:layout_height="55dp"

android:layout_alignParentBottom="true"

android:background="@color/theme_color"

android:gravity="center"

android:orientation="horizontal"

android:weightSum="3"

>

<RadioButton

android:id="@+id/rb_main_tab_menu1"

android:checked="true"

android:drawableTop="@drawable/radiobt_main_home"

android:gravity="center"

android:paddingTop="12dp"

android:text="@string/home_text"

android:textColor="@color/white"

/>

<RadioButton

android:id="@+id/rb_main_tab_menu2"

android:checked="false"

android:drawableTop="@drawable/radiobt_main_my"

android:gravity="center"

android:paddingTop="12dp"

android:text="@string/my_text"

android:textColor="@color/white"

/>

<RadioButton

android:id="@+id/rb_main_tab_menu3"

android:checked="false"

android:drawableTop="@drawable/radiobt_main_setting"

android:gravity="center"

android:paddingTop="12dp"

android:text="@string/setting_text"

android:textColor="@color/white"

/>

</RadioGroup>

<android.support.v4.view.ViewPager

android:id="@+id/vp_activity_main"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_above="@id/rg_menu_activity_main"

/>

</RelativeLayout>

</RelativeLayout>这个布局实现的效果如下:只看效果,大家觉得挺好的,但是重要的问题来了。下面的radioButton点了没反应,我检查了一下xml文件,再检查了一下java代码,没有问题啊,我开始方了,,,然后网上搜,好像没有人遇到这个问题,,检查好几遍之后,问旁边的同学,他说既然设置了监听,但是没有反应,那肯定是有一个东西把这个事件消费掉了,我想起来了之前看的事件分发机制,,建议大家对事件分发机制不懂的小伙伴赶紧看看,面试和日常写代码都要用到,特别是面试,面试官特别喜欢问。回归正题,大家看我的xml文件,我把viewpager写在了Radiogroup的下面,并且,layout_height="fill_parent"

这样我的viewpager就消费掉了我的radiobutton的点击事件,其实之后我觉得,是我的逻辑不正确,我应该顺序的写下来,而不是只实现功能,这样我看自己的代码可以看懂,可是给别人可能会造成误解。好了,开始说一下,实现底部导航的整个流程,实现的界面还如上:(在studio中写的)actionbar.xml

上面自定义的actionbar

系统自带的actionbar在java代码中去掉了代码功能:

左边返回键

中间显示的文字右边的更多键

上图中没有显示出来,是因为我没有让左右的键显示出来<?xml

version="1.0"

encoding="utf-8"?>

<RelativeLayout

xmlns:android="/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="@dimen/actionBar_height"

android:background="@color/theme_color"

>

<RelativeLayout

android:id="@+id/rl_back_actionbar"

android:layout_width="@dimen/actionBar_back"

android:layout_height="fill_parent"

android:visibility="invisible">

<ImageView

android:layout_width="22dp"

android:layout_height="20dp"

android:layout_centerVertical="true"

android:layout_marginLeft="12dp"

android:background="@drawable/back"

android:contentDescription="@string/app_name"/>

</RelativeLayout>

<TextView

android:id="@+id/tv_title_actionbar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="@string/TimeRobot"

android:textColor="#ffffff"

android:textSize="@dimen/actionBar_title_text_size"

/>

<RelativeLayout

android:id="@+id/rl_more_actionbar"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_alignParentRight="true"

android:visibility="invisible">

<ImageView

android:layout_width="25dp"

android:layout_height="25dp"

android:layout_centerVertical="true"

android:layout_marginRight="12dp"

android:background="@drawable/more"

android:contentDescription="@string/app_name"/>

</RelativeLayout>

</RelativeLayout>activity_main.xml文件

中间的部分color资源,是我引用的自动的,大家可以自己选择<?xml

version="1.0"

encoding="utf-8"?>

<RelativeLayout

xmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/theme_color"

android:clipToPadding="true"

tools:context=".MainActivity">

<!--

引入

actionbar-->

<include

android:id="@+id/actionbar_activity_main"

layout=

"@layout/actionbar"/>

<android.support.v4.view.ViewPager

android:id="@+id/vp_activity_main"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_below="@+id/actionbar_activity_main"

android:layout_alignParentRight="true"

android:layout_alignParentEnd="true"

android:background="@color/white"/>

<RadioGroup

android:id="@+id/rg_main_radioGroup"

android:layout_width="fill_parent"

android:layout_height="58dp"

android:layout_alignParentBottom="true"

android:background="@color/theme_color"

android:gravity="center"

android:orientation="horizontal"

android:weightSum="3">

<RadioButton

android:id="@+id/rb_main_tab_menu1"

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="fill_parent"

android:checked="true"

android:drawableTop="@drawable/radio_bt_plan"

android:gravity="center"

android:button="@null"

android:paddingTop="8dp"

android:text="@string/home_text"

android:textColor="@color/white"/>

<RadioButton

android:id="@+id/rb_main_tab_menu2"

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="fill_parent"

android:checked="false"

android:drawableTop="@drawable/radio_bt_time"

android:gravity="center"

android:button="@null"

android:paddingTop="8dp"

android:text="@string/timeGroup"

android:textColor="@color/white"/>

<RadioButton

android:id="@+id/rb_main_tab_menu3"

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="fill_parent"

android:checked="false"

android:drawableTop="@drawable/radio_bt_my"

android:gravity="center"

android:button="@null"

android:paddingTop="8dp"

android:textColor="@color/white"

android:text="@string/My"/>

</RadioGroup>

</RelativeLayout>注意一下,radiobutton中的一个属性是

drawableTop属性,这个后面引用的drawable资源是实现点击改变radiobutton状态的布局文件,我给大家贴出来radio_bt_plan.xml文件的代码,其他的只要新建,copy代码,改显示的图片即可。还有,对于初次用studio的伙伴,这里要注意了,new的时候,drawable>右键

>

new>newresourcefile

(即出来的第一个)而不是XMLradio_bt_plan.xml<?xml

version="1.0"

encoding="utf-8"?>

<selector

xmlns:android="/apk/res/android">

<item

android:drawable="@drawable/planning_press"

android:state_enabled="true"

android:state_focused="true"

android:state_pressed="false"/>

<item

android:drawable="@drawable/planning_press"

android:state_enabled="true"

android:state_pressed="true"

/>

<item

android:drawable="@drawable/planning_press"

android:state_checked="true"

android:state_enabled="true"

/>

<item

android:drawable="@drawable/planning"/>

</selector>接下来就是

MainActivity.java文件了public

class

MainActivity

extends

FragmentActivity

{

private

TextView

title_text;

private

ViewPager

vp_main_tab;

private

List<Fragment>

fragmentList

=

null;

private

FragmentPagerAdapter

mAdapter

=

null;

private

MyFragment

myFragment;

private

TimeGroupFragment

timeGroupFragment;

private

PlanningFragment

planningFragment;

private

RadioButton

rb_main_tab_menu1;

private

RadioButton

rb_main_tab_menu2;

private

RadioButton

rb_main_tab_menu3;

private

RadioGroup

rg_main_group;

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

init();

rg_main_group.setOnCheckedChangeListener(new

RadioGroup.OnCheckedChangeListener()

{

@Override

public

void

onCheckedChanged(RadioGroup

group,

int

checkedId)

{

switch

(checkedId)

{

case

R.id.rb_main_tab_menu1:

vp_main_tab.setCurrentItem(0);

initActionbar(0);

break;

case

R.id.rb_main_tab_menu2:

vp_main_tab.setCurrentItem(1);

initActionbar(1);

break;

case

R.id.rb_main_tab_menu3:

vp_main_tab.setCurrentItem(2);

initActionbar(2);

break;

default:

break;

}

}

});

initViewPage();

}

private

void

initActionbar(int

currentPage)

{

switch

(currentPage)

{

case

0:

title_text.setText(getResources().getString(R.string.TimeRobot));

break;

case

1:

title_text.setText(getResources().getString(R.string.timeGroup));

break;

case

2:

title_text.setText(getResources().getString(R.string.My));

break;

default:

break;

}

}

private

void

init()

{

title_text

=

(TextView)

findViewById(R.id.tv_title_actionbar);

vp_main_tab

=

(ViewPager)

findViewById(R.id.vp_activity_main);

fragmentList

=

new

ArrayList<Fragment>();

rg_main_group

=

(RadioGroup)

findViewById(R.id.rg_main_radioGroup);

rb_main_tab_menu1

=

(RadioButton)

findViewById(R.id.rb_main_tab_menu1);

rb_main_tab_menu2

=

(RadioButton)

findViewById(R.id.rb_main_tab_menu2);

rb_main_tab_menu3

=

(RadioButton)

findViewById(R.id.rb_main_tab_menu3);

myFragment

=

new

MyFragment();

timeGroupFragment

=

new

TimeGroupFragment();

planningFragment

=

new

PlanningFragment();

fragmentList.add(myFragment);

fragmentList.add(timeGroupFragment);

fragmentList.add(plannin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论