1.使用LinearLayout 底部布局+imageView 实现
底部四个主导航页面 布局文件 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/image_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/image_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/image_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/image_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 image_home;
private ImageView image_friends;
private ImageView image_message;
private ImageView image_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);
image_home = (ImageView)findViewById(R.id.image_recipe);
image_friends = (ImageView)findViewById(R.id.image_kitchen);
image_message = (ImageView)findViewById(R.id.image_find);
image_more = (ImageView)findViewById(R.id.image_user);
ll_recipe.setOnClickListener(this);
ll_kitchen.setOnClickListener(this);
ll_find.setOnClickListener(this);
ll_user.setOnClickListener(this);
ll_recipe.setSelected(true);
image_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);
image_home.setSelected(true);
home();
break;
case R.id.ll_kitchen:
ll_kitchen.setSelected(true);
image_friends.setSelected(true);
friend();
break;
case R.id.ll_find:
ll_find.setSelected(true);
image_message.setSelected(true);
message();
break;
case R.id.ll_user:
ll_user.setSelected(true);
image_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);
image_home.setSelected(false);
image_friends.setSelected(false);
image_message.setSelected(false);
image_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);
}
}
}
2.RadioButton 实现
布局文件 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity" >
<RelativeLayout
android:id="@+id/aboveLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/fragmentRoot"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:orientation="vertical" >
</FrameLayout>
<LinearLayout
android:id="@+id/bottomList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#bbbbbb"
android:orientation="horizontal" >
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#bbbbbb"
android:gravity="center_vertical"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/birtthday"
style="@style/footbar"
android:drawableTop="@drawable/birthday_normal"
android:height="25dp"
android:paddingTop="8dp"
android:text="生日"
android:width="40dp" />
<RadioButton
android:id="@+id/message"
style="@style/footbar"
android:drawableTop="@drawable/message_normal"
android:height="25dp"
android:paddingTop="8dp"
android:text="祝福短信"
android:width="40dp" />
<RadioButton
android:id="@+id/note"
style="@style/footbar"
android:drawableTop="@drawable/ej_label_add_d"
android:height="25dp"
android:paddingTop="8dp"
android:text="生日记事"
android:width="40dp" />
<RadioButton
android:id="@+id/me"
style="@style/footbar"
android:drawableTop="@drawable/me_normal"
android:height="25dp"
android:paddingTop="8dp"
android:text="我的"
android:width="40dp" />
</RadioGroup>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
MainActivity
package com.gemptc.birthdaydemonapp.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.Toast;
import com.gemptc.birthdaydemonapp.R;
import com.gemptc.birthdaydemonapp.fragment.BirthdayFragment;
import com.gemptc.birthdaydemonapp.fragment.MeFragment;
import com.gemptc.birthdaydemonapp.fragment.MessageFragment;
import com.gemptc.birthdaydemonapp.fragment.NoteFragment;
import com.gemptc.birthdaydemonapp.sqlite.DBManger;
import com.zhe.rex.*;
public class MainActivity extends ActionBarActivity {
private ActionBar actionbar;
private static FragmentManager fMgr;
private Eoiu spotManager;
private RadioButton birthday;
private RadioButton message;
private RadioButton blesswall;
private RadioButton me;
private int i = 1;
private NoteFragment nf = null;
private MessageFragment mf;
private BirthdayFragment bf;
private MeFragment mf1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionbar = getSupportActionBar();
actionbar.hide();
birthday = (RadioButton) findViewById(R.id.birtthday);
message = (RadioButton) findViewById(R.id.message);
me = (RadioButton) findViewById(R.id.me);
// 获取FragmentManager实例
fMgr = getSupportFragmentManager();
initFragment();
dealBottomButtonsClickEvent();
}
/**
* 初始化首个Fragment
*/
private void initFragment() {
FragmentTransaction ft = fMgr.beginTransaction();
bf = new BirthdayFragment();
ft.add(R.id.fragmentRoot, bf, "birthdayFragment");
ft.addToBackStack(null);
ft.commit();
}
/**
* 处理底部点击事件
*/
private void dealBottomButtonsClickEvent() {
findViewById(R.id.birtthday).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = fMgr.beginTransaction();
ft.replace(R.id.fragmentRoot, bf, "birthdayFragment");
ft.addToBackStack(null);
ft.commit();
}
});
findViewById(R.id.message).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = fMgr.beginTransaction();
if (mf == null) {
mf = new MessageFragment();
}
ft.replace(R.id.fragmentRoot, mf, "MessageFragment");
ft.addToBackStack(null);
ft.commit();
}
});
findViewById(R.id.note).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = fMgr.beginTransaction();
if (nf == null) {
nf = new NoteFragment();
}
ft.replace(R.id.fragmentRoot, nf, "NoteFragment");
ft.addToBackStack(null);
ft.commit();
}
});
findViewById(R.id.me).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = fMgr.beginTransaction();
if (mf1 == null) {
mf1 = new MeFragment();
}
ft.replace(R.id.fragmentRoot, mf1, "MeFragment");
ft.addToBackStack(null);
ft.commit();
}
});
}
// 点击返回按钮
@Override
public void onBackPressed() {
i++;
if (i == 2) {
Toast.makeText(this, "再按一次退出", Toast.LENGTH_LONG).show();
Eoiu spotManager = Eoiu.getInstance(getApplicationContext(),
"bec9e95da11570a46e46b2b005c204a9");
spotManager.exit(this);
}
else
MainActivity.this.finish();
}
@Override
protected void onRestart() {
i = 1;
super.onRestart();
}
@Override
protected void onResume() {
i = 1;
super.onResume();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case Add_REQUEST_CODE:
nf.refresh();
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}