底部導航欄,+recyclerView滑動隱藏底部導航欄
阿新 • • 發佈:2019-02-14
implementation'com.ashokvarma.android:bottom-navigation-bar:2.0.4' //底部導航欄 <com.ashokvarma.bottomnavigation.BottomNavigationBar android:id="@+id/bottom_navigation_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#13BEEA" android:layout_gravity="bottom"/> private void InitNavigationBar(){ bottomNavigationBar.setTabSelectedListener(this); bottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING); bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE) .setBarBackgroundColor("#24EA13") .setActiveColor("#138CEA"); // ShapeBadgeItem badge = new ShapeBadgeItem(); // badge.setShapeColor("#EA7B13").setHideOnSelect(true).setGravity(Gravity.RIGHT | Gravity.TOP); bottomNavigationBar .addItem(new BottomNavigationItem(R.drawable.ic_home_selected,"首頁").setInactiveIcon(ContextCompat.getDrawable(this,R.drawable.ic_home_normal)))//非選中的圖片) .addItem(new BottomNavigationItem(R.drawable.ic_girl_selected,"美女").setInactiveIcon(ContextCompat.getDrawable(this,R.drawable.ic_girl_normal))) .addItem(new BottomNavigationItem(R.drawable.ic_video_selected,"關注").setInactiveIcon(ContextCompat.getDrawable(this,R.drawable.ic_video_normal))) .addItem(new BottomNavigationItem(R.drawable.ic_care_selected,"個人").setInactiveIcon(ContextCompat.getDrawable(this,R.drawable.ic_care_normal))) .setFirstSelectedPosition(0) .initialise(); bottomNavigationBar.hide();//隱藏 bottomNavigationBar.hide(true);//隱藏是否啟動動畫,這裡並不能自定義動畫 //bottomNavigationBar.setBarBackgroundColor(R.color.white);//背景顏色 // bottomNavigationBar.setInActiveColor("");//未選中時的顏色 // bottomNavigationBar.setActiveColor("#FD8822");//選中時的顏色 } @Override public void onTabSelected(int position){ FragmentTransaction transaction=getSupportFragmentManager().beginTransaction(); switch(position){ case 0: if(blankFragment==null){ try{ blankFragment=Home_Fragment.class.newInstance(); }catch(InstantiationException e){ e.printStackTrace(); }catch(IllegalAccessException e){ e.printStackTrace(); } } transaction.replace(R.id.fragment_container,blankFragment); break; case 1: if(blankFragment2==null){ try{ blankFragment2=GirlFragment.class.newInstance(); }catch(InstantiationException e){ e.printStackTrace(); }catch(IllegalAccessException e){ e.printStackTrace(); } } transaction.replace(R.id.fragment_container,blankFragment2); break; case 2: if(blankFragment3==null){ try{ blankFragment3=VadioFragment.class.newInstance(); }catch(InstantiationException e){ e.printStackTrace(); }catch(IllegalAccessException e){ e.printStackTrace(); } } transaction.replace(R.id.fragment_container,blankFragment3); break; case 3: if(blankFragment4==null){ try{ blankFragment4=CareFragment.class.newInstance(); }catch(InstantiationException e){ e.printStackTrace(); }catch(IllegalAccessException e){ e.printStackTrace(); } } transaction.replace(R.id.fragment_container,blankFragment4); break; default: if(blankFragment==null){ try{ blankFragment=Home_Fragment.class.newInstance(); }catch(InstantiationException e){ e.printStackTrace(); }catch(IllegalAccessException e){ e.printStackTrace(); } } transaction.replace(R.id.fragment_container,blankFragment); break; } transaction.commit(); } @Override public void onTabUnselected(int position){ } @Override public void onTabReselected(int position){ } //沉浸式狀態列的屬性 private void initBar(){ // ImmersionBar.with(this) // .statusBarColor(R.color.colorPrimary) // .fitsSystemWindows(true) //使用該屬性必須指定狀態列的顏色,不然狀態列透明,很難看 // .fullScreen(true) //有導航欄的情況下,activity全屏顯示,也就是activity最下面被導航欄覆蓋,不寫預設非全屏 // .hideBar(BarHide.FLAG_HIDE_BAR) //隱藏狀態列或導航欄或兩者,不寫預設不隱藏 // // .keyboardEnable(true) //解決軟鍵盤與底部輸入框衝突問題 // // .keyboardEnable(true, WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE // // | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) //軟鍵盤自動彈出 // .init(); //或者 // ImmersionBar.with(this) // .transparentStatusBar() //透明狀態列,不寫預設透明色 // .transparentNavigationBar() //透明導航欄,不寫預設黑色(設定此方法,fullScreen()方法自動為true) // .transparentBar() //透明狀態列和導航欄,不寫預設狀態列為透明色,導航欄為黑色(設定此方法,fullScreen()方法自動為true) // .statusBarColor(R.color.colorPrimary) //狀態列顏色,不寫預設透明色 // .navigationBarColor(R.color.colorPrimary) //導航欄顏色,不寫預設黑色 // .barColor(R.color.colorPrimary) //同時自定義狀態列和導航欄顏色,不寫預設狀態列為透明色,導航欄為黑色 // .statusBarAlpha(0.3f) //狀態列透明度,不寫預設0.0f // .navigationBarAlpha(0.4f) //導航欄透明度,不寫預設0.0F // .barAlpha(0.3f) //狀態列和導航欄透明度,不寫預設0.0f // .statusBarDarkFont(true) //狀態列字型是深色,不寫預設為亮色 //// .flymeOSStatusBarFontColor(R.color.btn3) //修改flyme OS狀態列字型顏色 // .fullScreen(true) //有導航欄的情況下,activity全屏顯示,也就是activity最下面被導航欄覆蓋,不寫預設非全屏 // .hideBar(BarHide.FLAG_HIDE_BAR) //隱藏狀態列或導航欄或兩者,不寫預設不隱藏 //// .addViewSupportTransformColor(toolbar) //設定支援view變色,可以新增多個view,不指定顏色,預設和狀態列同色,還有兩個過載方法 // .titleBar(bottomNavigationBar) //解決狀態列和佈局重疊問題,任選其一 // .titleBarMarginTop(bottomNavigationBar) //解決狀態列和佈局重疊問題,任選其一 // .statusBarView(bottomNavigationBar) //解決狀態列和佈局重疊問題,任選其一 // .fitsSystemWindows(true) //解決狀態列和佈局重疊問題,任選其一,預設為false,當為true時一定要指定statusBarColor(),不然狀態列為透明色,還有一些過載方法 // .supportActionBar(true) //支援ActionBar使用 // .statusBarColorTransform(R.color.orange) //狀態列變色後的顏色 // .navigationBarColorTransform(R.color.orange) //導航欄變色後的顏色 // .barColorTransform(R.color.orange) //狀態列和導航欄變色後的顏色 //// .removeSupportView(bottomNavigationBar) //移除指定view支援 // .removeSupportAllView() //移除全部view支援 // .navigationBarEnable(true) //是否可以修改導航欄顏色,預設為true // .navigationBarWithKitkatEnable(true) //是否可以修改安卓4.4和emui3.1手機導航欄顏色,預設為true // .fixMarginAtBottom(true) //已過時,當xml裡使用android:fitsSystemWindows="true"屬性時,解決4.4和emui3.1手機底部有時會出現多餘空白的問題,預設為false,非必須 // .addTag("tag") //給以上設定的引數打標記 // .getTag("tag") //根據tag獲得沉浸式引數 // .reset() //重置所以沉浸式引數 // .keyboardEnable(true) //解決軟鍵盤與底部輸入框衝突問題,預設為false,還有一個過載方法,可以指定軟鍵盤mode // .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) //單獨指定軟鍵盤模式 // .setOnKeyboardListener(new OnKeyboardListener() { //軟鍵盤監聽回撥 // @Override // public void onKeyboardChange(boolean isPopup, int keyboardHeight) { // Logger.e(isPopup + ""); //isPopup為true,軟鍵盤彈出,為false,軟鍵盤關閉 // } // }) // .init(); //必須呼叫方可沉浸式 }
//第二種底部導航欄
implementation'com.hjm:BottomTabBar:1.1.3' <com.hjm.bottomtabbar.BottomTabBar android:id="@+id/bottom_tab_bar" android:layout_width="match_parent" android:layout_height="match_parent" app:tab_bar_background="#FFFFFF" app:tab_divider_background="#FF0000" app:tab_divider_height="5dp" app:tab_font_size="6sp" app:tab_img_font_padding="0dp" app:tab_img_height="30dp" app:tab_img_width="30dp" app:tab_isshow_divider="true" app:tab_padding_bottom="5dp" app:tab_padding_top="8dp" app:tab_selected_color="#000000" app:tab_unselected_color="@color/colorPrimary"/> mBottomTabBar=(BottomTabBar)findViewById(R.id.bottom_tab_bar); mBottomTabBar .init(getSupportFragmentManager()) .setImgSize(70,70)//設定圖片尺寸 .setFontSize(10)//設定文字大小 .setTabPadding(4,6,10)//設定ICON圖片與上部分割線的間隔、圖片與文字的間隔、文字與底部的間隔 .setChangeColor(Color.DKGRAY,Color.GREEN)//設定選中的顏色、未選中的顏色 .addTabItem("首頁",R.drawable.aa,ShouyeFragment.class) .addTabItem("發現",R.drawable.bb,FaxianFragment.class) .addTabItem("最近",R.drawable.cc,ZuijinFragment.class) .addTabItem("我的",R.drawable.dd,WodeFragment.class) .isShowDivider(false)//設定是否顯示分割線 .setTabBarBackgroundColor(Color.WHITE) .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener(){ @Override public void onTabChange(int position,String name,View view){ } }).setCurrentTab(0);//設定當前選中的Tab,從0開始 第三種 底部 導航欄 implementation'com.jpeng:JPTabBar:1.2.3' // 如果想在中間設定圖片突起的話,父佈局必須得是相對佈局和,幀佈局,它的高度得定死
mTabbar.setTitles(R.string.tab1, R.string.tab2, R.string.tab3, R.string.tab4) .setNormalIcons(R.mipmap.tab1_normal, R.mipmap.tab2_normal, R.mipmap.tab3_normal, R.mipmap.tab4_normal) .setSelectedIcons(R.mipmap.tab1_selected, R.mipmap.tab2_selected, R.mipmap.tab3_selected, R.mipmap.tab4_selected) .generate();
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="db.lanxing.t1.view.homeactivity.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/tabBar" />
<com.jpeng.jptabbar.JPTabBar
android:id="@+id/tabBar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
app:TabIconSize="20dp"
app:TabMiddleView="@layout/item"
/>
</RelativeLayout>
java程式碼,利用反射註解
@Titles
private static final String[]mTitles={"頁面一","頁面二","頁面三","頁面四"};
@SeleIcons
private static final int[]mSeleIcons={R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d};
@NorIcons
private static final int[]mNormalIcons={R.mipmap.aa,R.mipmap.bb,R.mipmap.cc,R.mipmap.dd};
//獲取中間圖片的id
View middleView=tabBar.getMiddleView();
ImageView imageView=middleView.findViewById(R.id.img);
//關聯viewPager
tabBar.setContainer(viewPager);
package db.lanxing.mydb.view.fragment.shujuChild;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.getbase.floatingactionbutton.FloatingActionButton;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import db.lanxing.mydb.R;
import db.lanxing.mydb.contract.MyContract;
import db.lanxing.mydb.module.MyModel;
import db.lanxing.mydb.module.adapter.MyRecyAdapter;
import db.lanxing.mydb.module.data.App;
import db.lanxing.mydb.module.data.EventBusMessage;
import db.lanxing.mydb.module.data.beans.Girl_Bean;
import db.lanxing.mydb.module.data.beans.TouTiaoBean;
import db.lanxing.mydb.module.data.beans.Video_Bean;
import db.lanxing.mydb.preseter.MyPresenter;
import db.lanxing.mydb.view.activity.XiangQingActivity;
import db.lanxing.mydb.view.fragment.BaseFragment;
/**
* A simple {@link Fragment} subclass.
*/
public class ShuJuFragment extends BaseFragment<MyModel, MyPresenter> implements MyContract.View {
@BindView(R.id.recy)
RecyclerView recy;
@BindView(R.id.sma)
SmartRefreshLayout sma;
@BindView(R.id.ll)
LinearLayout ll;
@BindView(R.id.ftab)
FloatingActionButton ftab;
Unbinder unbinder;
private MyRecyAdapter recyAdapter;
private ValueAnimator valueAnimator;
private View viewById;
public ShuJuFragment() {
}
private List<TouTiaoBean.T1348647909107Bean> lists = new ArrayList<>();
private String mParam1;
private String mParam2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(App.ARG_PARAM1);
mParam2 = getArguments().getString(App.ARG_PARAM2);
}
}
@Override
protected int getLayoutId() {
return R.layout.fragment_blank_fragment3;
}
@Override
protected void initView(View view) {
unbinder = ButterKnife.bind(this, view);
viewById = getActivity().findViewById(R.id.bottom_navigation_bar);
initBar();
recy.setLayoutManager(new LinearLayoutManager(getContext()));
p.getPUrl(mParam1, mParam2, "0", "20");
Toast.makeText(getContext(), mParam1 + mParam2, Toast.LENGTH_SHORT).show();
recyAdapter = new MyRecyAdapter(R.layout.item, lists);
recyAdapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);//載入動畫
recyAdapter.isFirstOnly(false);//執行次數是否只一次
recy.setAdapter(recyAdapter);
startAnimation();
}
private void initBar() {
// mImmersionBar.keyboardEnable(true).navigationBarColor(R.color.colorPrimary).navigationBarWithKitkatEnable(false).init();
}
private void initRefreshData() {
sma.setRefreshHeader(new ClassicsHeader(getContext()));
// 設定 Footer 為 球脈衝 樣式
sma.setRefreshFooter(new BallPulseFooter(getContext()).setSpinnerStyle(SpinnerStyle.Scale));
sma.setRefreshFooter(new ClassicsFooter(getContext()).setSpinnerStyle(SpinnerStyle.Scale));
sma.setReboundDuration(100);
sma.setScrollBarFadeDuration(100);
sma.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
// handler.postDelayed(runnable, 10);
p.getPUrl(mParam1, mParam2, "0", "20");
refreshlayout.finishRefresh(1000/*,false*/);
}
}); // 傳入false表示重新整理失敗
sma.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshlayout) {
p.getPUrl(mParam1, mParam2, "0", "30");
// handler.postDelayed(runnable, 10);
// Toast.makeText(MainActivity.this, "載入完成", Toast.LENGTH_SHORT).show();
refreshlayout.finishLoadMore(1000/*,false*/);
// 傳入false表示載入失敗
}
});
}
private void initTouch() {
recyAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
Intent intent = new Intent(getActivity(), XiangQingActivity.class);
EventBusMessage eventBusMessage = new EventBusMessage(lists.get(position).getImgsrc(), lists.get(position).getTitle(), lists.get(position).getUrl());
EventBus.getDefault().postSticky(eventBusMessage);
startActivity(intent);
return true;
}
});
recyAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
Intent intent = new Intent(getActivity(), XiangQingActivity.class);
EventBusMessage eventBusMessage = new EventBusMessage(lists.get(position).getImgsrc(), lists.get(position).getTitle(), lists.get(position).getUrl());
EventBus.getDefault().postSticky(eventBusMessage);
startActivity(intent);
}
});
recy.setOnScrollListener(new RecyclerView.OnScrollListener() {
//RecyclerView 滑動 事件 -1 表示 向上, 1 表示向下。
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (!recyclerView.canScrollVertically(-1)) {
} else if (!recyclerView.canScrollVertically(1)) {
} else if (dy < 0) {
onScrolledUp();
} else if (dy > 0) {
onScrolledDown();
}
super.onScrolled(recyclerView, dx, dy);
}
public void onScrolledUp() {
View linearLayout = getActivity().findViewById(R.id.bottom_navigation_bar);
linearLayout.setVisibility(View.VISIBLE);
ftab.setVisibility(View.GONE);
}
public void onScrolledDown() {
View view = getActivity().findViewById(R.id.bottom_navigation_bar);
view.setVisibility(View.GONE);
ftab.setVisibility(View.VISIBLE);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
boolean a = true;
private void startAnimation() {
recy.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (a) {
ftab.setVisibility(View.VISIBLE);
} else {
ftab.setVisibility(View.GONE);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy < -1) {
a = true;
} else if (dy > 1) {
a = false;
}
}
});
}
@Override
public void getVTouTiaoData(final List<TouTiaoBean.T1348647909107Bean> list) {
// Toast.makeText(getContext(), "list:" + list, Toast.LENGTH_SHORT).show();
lists.addAll(list);
recyAdapter.notifyDataSetChanged();
ll.setVisibility(View.GONE);
initTouch();
initRefreshData();
}
@Override
public void getVData_Video(List<Video_Bean.V9LG4E6VRBean> list) {
}
@Override
public void getVGirlData(List<Girl_Bean.ResultsBean> list) {
}
@Override
public void Error(String message) {
Log.d("ShuJuFragment", message);
}
@OnClick(R.id.ftab)
public void onViewClicked() {
recy.smoothScrollToPosition(0);
}
}