Android仿微信页面底部导航效果代码实现

大家在参考本地代码的时候要根据需要适当的修改,里面有冗余代码小编没有删除。好了,废话不多说了,一切让代码说话吧!

关键代码如下所示:

.java里面的主要代码

public class MainActivity extends BaseActivity implements TabChangeListener {
private Fragment[] fragments;
private FragZaiXianYuYue fragZaiXianYuYue;
private FragDaoLuJiuYuan fragDaoLuJiuYuan;
private FragJiFenShangCheng fragJiFenShangCheng;
private FragMe fragMe;
private ImageView img_right;
private ImageView[] imagebuttons;
private ImageView img_me_notity;
private TextView[] textviews;
private int index;
private int currentTabIndex;// 当前fragment的index
private int keyBackClickCount = 0;
private int indexChange;
private boolean isChangeTab = false;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.mainactivity);
initView();
initTabView();
FragBYRecord.setTabChangeListener(this);
FragWXRecord.setTabChangeListener(this);
registerMessageReceiver();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
isForeground = true;
requestMaintenance();
if (isChangeTab) {
if (indexChange == 0) {
viewTitle.setZhongJianText(R.string.frag_zxyy);
tv_left.setVisibility(View.GONE);
} else if (indexChange == 0) {
viewTitle.setZhongJianText(R.string.frag_dljy);
tv_left.setVisibility(View.GONE);
}
changeTab(indexChange);
isChangeTab = false;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
isForeground = false;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(null != mMessageReceiver)
unregisterReceiver(mMessageReceiver);
}
private void initView() {
viewTitle = (ViewTitle) findViewById(R.id.title_bar);
img_right = viewTitle.getYoubianView();
img_right.setVisibility(View.VISIBLE);
tv_left = viewTitle.getZuobianTextView();
viewTitle.getZuobianView().setVisibility(View.GONE);
tv_left.setText("XXXX");
img_right.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(MainActivity.this,
MineActivity.class);
MineActivity.mFragValue = MineActivity.FRAG_SYSTEMMESSAGE;
startActivity(intent);
}
});
tv_left.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
fragMe.addNewCar();
}
});
}
private void initTabView() {
fragZaiXianYuYue = new FragZaiXianYuYue();
fragDaoLuJiuYuan = new FragDaoLuJiuYuan();
fragJiFenShangCheng = new FragJiFenShangCheng();
fragMe = new FragMe();
fragments = new Fragment[] { fragZaiXianYuYue, fragDaoLuJiuYuan,
fragJiFenShangCheng, fragMe };
imagebuttons = new ImageView[4];
imagebuttons[0] = (ImageView) findViewById(R.id.ib_zzyy);
imagebuttons[1] = (ImageView) findViewById(R.id.ib_dljy);
imagebuttons[2] = (ImageView) findViewById(R.id.ib_jfsc);
imagebuttons[3] = (ImageView) findViewById(R.id.ib_me);
img_me_notity = (ImageView) findViewById(R.id.ib_me_notity);
imagebuttons[0].setSelected(true);
viewTitle.setZhongJianText(R.string.frag_zxyy);
textviews = new TextView[4];
textviews[0] = (TextView) findViewById(R.id.tv_ib_zzyy);
textviews[1] = (TextView) findViewById(R.id.tv_dljy);
textviews[2] = (TextView) findViewById(R.id.tv_jfsc);
textviews[3] = (TextView) findViewById(R.id.tv_me);
textviews[0]
.setTextColor(getResources().getColor(R.color.color_yellow));
// 添加显示第一个fragment
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragZaiXianYuYue)
.add(R.id.fragment_container, fragDaoLuJiuYuan)
.add(R.id.fragment_container, fragJiFenShangCheng)
.add(R.id.fragment_container, fragMe).hide(fragDaoLuJiuYuan)
.hide(fragJiFenShangCheng).hide(fragMe).show(fragZaiXianYuYue)
.commit();
}
public void onTabClicked(View view) {
switch (view.getId()) {
case R.id.re_zzyy:
index = 0;
if (fragZaiXianYuYue != null) {
}
viewTitle.setZhongJianText(R.string.frag_zxyy);
tv_left.setVisibility(View.GONE);
changeTab(index);
break;
case R.id.re_dljy:
index = 1;
viewTitle.setZhongJianText(R.string.frag_dljy);
tv_left.setVisibility(View.GONE);
changeTab(index);
break;
case R.id.re_jfsc:
if(SharePreferUtil.getBoolean(CommonString.HAVESERVICE, false)){
index = 2;
viewTitle.setZhongJianText(R.string.frag_jfsc);
tv_left.setVisibility(View.GONE);
fragJiFenShangCheng.requestJudgeCar();
changeTab(2);
if(SharePreferUtil.getBoolean("isFristGoShop", true)){
SharePreferUtil.putBoolean("isFristGoShop", false);
fragJiFenShangCheng.mengcengDialog();
}
}else{
showAddServiceDialog();
}
break;
case R.id.re_me:
index = 3;
viewTitle.setZhongJianText(R.string.frag_me);
tv_left.setVisibility(View.VISIBLE);
changeTab(index);
break;
}
}
public void changeTab(int index) {
if (currentTabIndex != index) {
FragmentTransaction trx = getSupportFragmentManager()
.beginTransaction();
trx.hide(fragments[currentTabIndex]);
if (!fragments[index].isAdded()) {
trx.add(R.id.fragment_container, fragments[index]);
}
trx.show(fragments[index]).commit();
}
imagebuttons[currentTabIndex].setSelected(false);
// 把当前tab设为选中状态
imagebuttons[index].setSelected(true);
textviews[currentTabIndex].setTextColor(getResources().getColor(
R.color.white));
textviews[index].setTextColor(getResources().getColor(
R.color.color_yellow));
currentTabIndex = index;
}
mainactivity.xml:
<include layout="@layout/layout_bottom"/>
layout_bottom.xml:
<?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="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/black"
android:orientation="vertical" >
<!-- 普通底部导航 -->
<LinearLayout
android:id="@+id/main_bottom"
android:layout_width="match_parent"
android:layout_height="54dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<RelativeLayout
android:id="@+id/re_zzyy"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onTabClicked"
android:padding="3dp" >
<RelativeLayout
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center" >
<ImageView
android:id="@+id/ib_zzyy"
android:layout_width="30dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:focusable="false"
android:scaleType="centerInside"
android:src="@drawable/tab_zaixianyuyue" />
<TextView
android:id="@+id/tv_ib_zzyy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ib_zzyy"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dp"
android:textColor="@color/white"
android:text="@string/frag_zxyy"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/re_dljy"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onTabClicked"
android:padding="3dp" >
<RelativeLayout
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center" >
<ImageView
android:id="@+id/ib_dljy"
android:layout_width="30dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:focusable="false"
android:scaleType="centerInside"
android:src="@drawable/tab_daolujiuyuan" />
<TextView
android:id="@+id/tv_dljy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ib_dljy"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dp"
android:textColor="@color/white"
android:text="@string/frag_dljy"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/re_jfsc"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onTabClicked"
android:padding="3dp" >
<RelativeLayout
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center" >
<ImageView
android:id="@+id/ib_jfsc"
android:layout_width="30dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:focusable="false"
android:scaleType="centerInside"
android:src="@drawable/tab_jifenshangcheng" />
<TextView
android:id="@+id/tv_jfsc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ib_jfsc"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dp"
android:textColor="@color/white"
android:text="@string/frag_jfsc"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/re_me"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onTabClicked"
android:padding="3dp" >
<RelativeLayout
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center" >
<ImageView
android:id="@+id/ib_me"
android:layout_width="30dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:focusable="false"
android:scaleType="centerInside"
android:src="@drawable/tab_me" />
<ImageView
android:id="@+id/ib_me_notity"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_alignTop="@+id/ib_me"
android:layout_alignRight="@+id/ib_me"
android:scaleType="centerInside"
android:src="@drawable/app_34_icon_point_normal"
android:visibility="gone" />
<TextView
android:id="@+id/tv_me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ib_me"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dp"
android:textColor="@color/white"
android:text="@string/frag_me"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>

以上所述是小编给大家介绍的Android仿微信页面底部导航效果代码实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2016-09-06

Android design包自定义tablayout的底部导航栏的实现方法

以前做项目大多用的radiobutton,今天用tablayout来做一个tab切换页面的的效果. 实现的效果就是类似QQ.微信的页面间(也就是Fragment间)的切换.如图: 布局只要一个tablayout <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id=&

Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果

BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退.于是就用这种方式实现了,效果还不错.github有详细说明,多余的就不说了. 这个roughike是这个项目的所有者(大神致敬). 我用的是Android studio开发,fragment全部导的V4的包(以为最开始就支持的是v4的,后面也支持了app.fragment). 首先是dependen

Android 底部导航控件实例代码

一.先给大家展示下最终效果 通过以上可以看到,图一是简单的使用,图二.图三中为结合ViewPager共同使用,而且都可以随ViewPager的滑动渐变色,不同点是图二为选中非选中两张图片,图三的选中非选中是一张图片只是做了颜色变化. 二. 需求 我们希望做可以做成这样的,可以在xml布局中引入控件并绑定数据,在代码中设置监听回调,并且配置使用要非常简单! 三.需求分析 根据我们多年做不明确需求项目的经验,以上需求还算明确.那么我们可以采用在LinearLayout添加子View控件,这个子Vie

Android实现底部导航栏功能(选项卡)

现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其中各个类的作用以及资源文件就不详细解释了,还有资源图片(在该Demo中借用了其它应用程序的资源图片)也不提供了,大家可以自行更换自己需要的资源图片.直接上各个布局文件或各个类的代码: 1. res/layout目录下的 maintabs.xml 源码: <?xml version="1.0&q

关注Ionic底部导航按钮tabs在android情况下浮在上面的处理

Ionic是一款流行的移动端开发框架,但是刚入门的同学会发现,Ionic在iOS和Android的底部tabs显示不一样.在安卓情况下底部tabs会浮上去. 如下图展示: 网上也有很多此类的解决方案,但是我觉得说一千道一万都不如给个dome实在,下面附上解决方案的dome,大家可以看看! <!DOCTYPE html> <html ng-app="ionic"> <head> <meta charset="UTF-8">

Android BottomNavigationBar底部导航控制器使用方法详解

最近Google在自己推出的Material design中增加了Bottom Navigation导航控制.Android一直没有官方的导航控制器,自己实现确实是五花八门,有了这个规定之后,就类似苹果的底部Toolbar,以后我们的APP就会有一致的风格,先看一张效果: 这是官方在Material design中给出一张图,确实很不错. 1.BottomNavigationBar的下载地址 https://github.com/Ashok-Varma/BottomNavigation 2.使用

Android BottomNavigationView底部导航效果

BottomNavigationView 很早之前就在 Material Design 中出现了,但是直到 Android Support Library 25 中才增加了 BottomNavigationView 控件.也就是说如果使用官方的BottomNavigationView控件必须让targetSdkVersion >= 25,这样才能引入25版本以上的兼容包. 接下来我们来看看如何使用BottomNavigationView. 使用BottomNavigationView 需要添加d

android效果TapBarMenu绘制底部导航栏的使用方式示例

其他的不多说了!我们来看看效果吧       一.实现方式一:直接引入compile方式 Add the dependency to your build.gradle: compile 'com.github.michaldrabik:tapbarmenu:1.0.5' 布局设计 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc

Android Activity与Fragment实现底部导航器

单Activity多Fragment实现底部导航器 最近由于Android基础知识讲解需要,采用单Activity多Fragment实现类似QQ底部导航器示例,这种开发模式广泛应用于App开发,比如QQ,微信,新浪等,关于Android底部导航栏的实现方式特别多,实现也是五花八门,同时Google在自己推出的Material design中也增加了Bottom Navigation导航控制,实现起来更加简单,且支持动态效果更加酷炫,但是因为是基础的知识,所以打算通过自定义来实现,不使用Botto

Android程序开发之Fragment实现底部导航栏实例代码

流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment

Android实现带有指示器的自定义底部导航栏

今天这篇文章,主要是给大家实现一个自定义的带有指示器的底部导航栏. 先看一下实现的效果吧. 这个自定义控件的使用要注意以下几个方面: 1.没有布局文件及资源文件,只需要一个java文件就可调用 2.可以非常灵活的使用,一句代码就可以添加到项目中 3.暂时只支持4.0以上版本,颜色值使用的是系统自带色值,如需在低版本使用,请自己替换颜色值 4.支持智能适配,可以根据底部按钮的数量,自动的调整布局 5.主内容区域,必须使用Fragment实现,通过附加到Viewpager上实现界面的左右滑动 下面给

Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多

最近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多. 新浪微博就是使用这种方式的典型. 当用户从网络上读取微博的时候,如果一下子全部加载用户未读的微博这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了,其实这个分页可以做成客户端的分页,也可以做成服务器端的分页(点击加载时,从服务器对应的加载第N页就好了!!!).通过分

Android程序开发之ListView 与PopupWindow实现从左向右滑动删除功能

文章实现的功能是:在ListView的Item上从右向左滑时,出现删除按钮,点击删除按钮把Item删除. 看过文章后,感觉没有必要把dispatchTouchEvent()和onTouchEvent()两个方法都重写,只要重写onTouchEvent就好了.于是对代码作了一些调整: public class MyListView extends ListView { private static final String TAG = "MyListView"; private int

Android程序开发之UIScrollerView里有两个tableView

一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource> { UIScrollView *_scrolView; UITableView *_tableView; UITableView

Android程序开发之ListView实现横向滚动(带表头与固定列)

问题背景:在做图表展示的时候,ListView可以上下左右滑动,但最左边一列在向右滑动时,保持不变,表头在向下滑动时保持不变. 有用两个ListView实现的,但测试过,好像有些问题 这个例子是通过(ListView + HorizontalScrollView)实现的 效果图: Activity代码 /** * * 带滑动表头与固定列的ListView */ public class HListActivity extends Activity{ private ListView mListV

Android程序开发之WebView使用总结

前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 使用场景: 1.)添加权限 <uses-permission android:name="android.permission.INTERNET" /> 2.)布局文件 <WebView android:id="@+id/webView" android:layout_width="match_parent" andr

使用RadioButton+Fragment实现底部导航栏效果

底部导航栏,在我们App项目中是非常常用!而且实现它的方式很多,今天我们就来使用RadioButton+Fragment实现底部导航栏! 下面就让我们动手吧,首先我们打开RadioButtonDemo这个项目,首先修改activity_main.xml文件如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.androi

Android实现沉浸式导航栏实例代码

废话不多说了,直接给大家贴代码了,具体代码如下所示: private SystemBarTintManager tintManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // getWindow().addFlags(WindowManager.Layo