Android Studio 在添加Activity的時候是可以創建一些帶模板的activity 的,比如自Base Activity、Empty Activity、FullScreen Activity、Bottom Navifation Activity
自己常用的就是Empty Activity ,它會自動在清單文件中註冊activity和創建佈局文件,當然這些都是可以選擇的,今天心血來潮的創建了一個Bottom Navigation Activity 模板的類,發現了這個BottomNavigationVIew,它是Android Support Library 25.0.0 版本中,新增加了一個API,底部導航視圖。
先看一下studio 模板中的代碼
<?xml version="1.0" encoding="utf-8"?>
Avtivity佈局文件很簡單:
<?xml version="1.0" encoding="utf-8"?>
app:itemIconTint
: 設置菜單圖標着色
app:itemTextColor
: 設置菜單文本顏色
app:menu
: 設置菜單
app:itemBackground
: 設置導航欄的背景色
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
return true;
case R.id.navigation_dashboard:
mTextMessage.setText(R.string.title_dashboard);
return true;
case R.id.navigation_notifications:
mTextMessage.setText(R.string.title_notifications);
return true;
}
return false;
}
};
package com.song.wallpager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends FragmentActivity {
private Fragment1 fragment1;
private Fragment2 fragment2;
private Fragment3 fragment3;
private Fragment[] fragments;
private int lastShowFragment = 0;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
if (lastShowFragment != 0) {
switchFrament(lastShowFragment, 0);
lastShowFragment = 0;
}
return true;
case R.id.navigation_dashboard:
if (lastShowFragment != 1) {
switchFrament(lastShowFragment, 1);
lastShowFragment = 1;
}
return true;
case R.id.navigation_notifications:
if (lastShowFragment != 2) {
switchFrament(lastShowFragment, 2);
lastShowFragment = 2;
}
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
initFragments();
}
/**
* 切換Fragment
*
* @param lastIndex 上個顯示Fragment的索引
* @param index 需要顯示的Fragment的索引
*/
public void switchFrament(int lastIndex, int index) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(fragments[lastIndex]);
if (!fragments[index].isAdded()) {
transaction.add(R.id.fragment_container, fragments[index]);
}
transaction.show(fragments[index]).commitAllowingStateLoss();
}
private void initFragments() {
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
fragments = new Fragment[]{fragment1, fragment2, fragment3};
lastShowFragment = 0;
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, fragment1)
.show(fragment1)
.commit();
}
}