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 模板中的代码
看一下BottomNavigationView的底部导航布局文件menu类型的哦!!!它的写法与正常的menu文件一致
Avtivity布局文件很简单:
这几个属性可以根据需求写在布局文件中:
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;
}
};
这时实现的效果就是当点击底部按钮时,TextView上的数据就是相应的去改变,很容易让我们想到大部分APP 的首页,但是首页如果只给个textview那是不可能,就想按照以往的经验去和Fragment结合使用。
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();
}
}