小编给大家分享一下 android开发中如何实现底部导航,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
底部四个主导航页面 布局文件 activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.tastelibrary.MainActivity"
tools:ignore="MergeRootFrame" >
<FrameLayout
android:id="@+id/fl_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</FrameLayout>
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/ll_recipe"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/p_w_picpath_recipe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/recipe_btn_selector" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_kitchen"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/p_w_picpath_kitchen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/kitchen_btn_selector" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_find"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/p_w_picpath_find"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/find_btn_selector" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_user"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/p_w_picpath_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/user_btn_selector" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
MainActivity
package com.example.tastelibrary;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.os.Build;
public class MainActivity extends ActionBarActivity implements OnClickListener{
private LinearLayout ll_recipe;
private LinearLayout ll_kitchen;
private LinearLayout ll_find;
private LinearLayout ll_user;
private ImageView p_w_picpath_home;
private ImageView p_w_picpath_friends;
private ImageView p_w_picpath_message;
private ImageView p_w_picpath_more;
//Fragment管理器
private FragmentManager fm = this.getSupportFragmentManager();
private FragmentTransaction ft;
private RecipeFragment fragmentPage1;
private FindFragment fragmentPage2;
private KitchenFragment fragmentPage3;
private UserFragment fragmentPage4;
ActionBar myActionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myActionBar=getSupportActionBar();
initView();
//开始事务(每次改变Fragment管理器之后都要提交)
ft = fm.beginTransaction();
home();
//提交事务
ft.commit();
}
private void initView(){
ll_recipe = (LinearLayout)findViewById(R.id.ll_recipe);
ll_kitchen = (LinearLayout)findViewById(R.id.ll_kitchen);
ll_find = (LinearLayout)findViewById(R.id.ll_find);
ll_user = (LinearLayout)findViewById(R.id.ll_user);
p_w_picpath_home = (ImageView)findViewById(R.id.p_w_picpath_recipe);
p_w_picpath_friends = (ImageView)findViewById(R.id.p_w_picpath_kitchen);
p_w_picpath_message = (ImageView)findViewById(R.id.p_w_picpath_find);
p_w_picpath_more = (ImageView)findViewById(R.id.p_w_picpath_user);
ll_recipe.setOnClickListener(this);
ll_kitchen.setOnClickListener(this);
ll_find.setOnClickListener(this);
ll_user.setOnClickListener(this);
ll_recipe.setSelected(true);
p_w_picpath_home.setSelected(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
//每次点击时都需要重新开始事务
ft = fm.beginTransaction();
//把显示的Fragment隐藏
setSelected();
switch (v.getId()) {
case R.id.ll_recipe:
ll_recipe.setSelected(true);
p_w_picpath_home.setSelected(true);
home();
break;
case R.id.ll_kitchen:
ll_kitchen.setSelected(true);
p_w_picpath_friends.setSelected(true);
friend();
break;
case R.id.ll_find:
ll_find.setSelected(true);
p_w_picpath_message.setSelected(true);
message();
break;
case R.id.ll_user:
ll_user.setSelected(true);
p_w_picpath_more.setSelected(true);
more();
break;
}
ft.commit();
}
/**
* 设置每个按钮是否被选中
*/
private void setSelected(){
ll_recipe.setSelected(false);
ll_kitchen.setSelected(false);
ll_find.setSelected(false);
ll_user.setSelected(false);
p_w_picpath_home.setSelected(false);
p_w_picpath_friends.setSelected(false);
p_w_picpath_message.setSelected(false);
p_w_picpath_more.setSelected(false);
if(fragmentPage1 != null){
//隐藏Fragment
ft.hide(fragmentPage1);
}
if(fragmentPage2 != null){
ft.hide(fragmentPage2);
}
if(fragmentPage3 != null){
ft.hide(fragmentPage3);
}
if(fragmentPage4 != null){
ft.hide(fragmentPage4);
}
}
private void home(){
if(fragmentPage1 == null){
fragmentPage1 = new RecipeFragment();
/*添加到Fragment管理器中
这里如果用replace,
当每次调用时都会把前一个Fragment给干掉,
这样就导致了每一次都要创建、销毁,
数据就很难保存,用add就不存在这样的问题了,
当Fragment存在时候就让它显示,不存在时就创建,
这样的话数据就不需要自己保存了,
因为第一次创建的时候就已经保存了,
只要不销毁一直都将存在*/
ft.add(R.id.fl_content, fragmentPage1);
}else{
//显示Fragment
ft.show(fragmentPage1);
}
}
private void friend(){
if(fragmentPage2 == null){
fragmentPage2 = new FindFragment();
ft.add(R.id.fl_content, fragmentPage2);
}else{
ft.show(fragmentPage2);
}
}
private void message(){
if(fragmentPage3 == null){
fragmentPage3 = new KitchenFragment();
ft.add(R.id.fl_content, fragmentPage3);
}else{
ft.show(fragmentPage3);
}
}
private void more(){
if(fragmentPage4 == null){
fragmentPage4 = new UserFragment();
ft.add(R.id.fl_content, fragmentPage4);
}else{
ft.show(fragmentPage4);
}
}
}
以上是“ android开发中如何实现底部导航”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。