zoukankan      html  css  js  c++  java
  • Android特效——————底部/顶部导航条(Fragment+ViewPaper+XTabLayout)

    初次使用xtablayout和viewpaper2.所以就弄了最基础的导航条

    一、效果

    二、代码

    • 配置环境【在bulid.gradle中添加以下代码】
        implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
        implementation 'com.androidkun:XTabLayout:1.1.4'
    • 按钮点击切换图片【几个点击按钮图片,几个这样的布局】
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@mipmap/bookkeep_select" android:state_selected="true" />
        <item android:drawable="@mipmap/bookkeep_unselect" android:state_selected="false" />
    </selector>
    • 主页布局代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    
    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/pagers"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"/>
    
    <com.androidkun.xtablayout.XTabLayout
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        app:xTabMode="fixed"
        app:xTabTextSize="15sp"
        app:xTabTextColor="@color/colorThemeText"
        app:xTabSelectedTextColor="@color/colorTheme"
        app:xTabSelectedTextSize="20sp" />
    </LinearLayout>


    xtablyout属性说明:

    字体
    xTabTextSize:默认按钮字体大小【未点击时】
    xTabTextColor:默认字体颜色【未点击时】
    xTabSelectedTextColor:选中时字体的大小
    xTabSelectedTextSize:选中时的字体颜色
    xTabTextSelectedBold="true":设置选中Tab的文本是否粗体显示
    app:xTabTextBold="true":设置未选中Tab的文本是否粗体显示

    指示器设置
    xTabDisplayNum:设置屏幕内显示Tab个数
    xTabDividerWidthWidthText="true":设置指示器长度随文本改变
    xTabMode:设置按钮是否可以滑动【注意是按钮,不是页面】
    背景色
    xTabBackgroundColor:默认按钮背景色
    xTabSelectedBackgroundColor:选中按钮背景色
    分割线
    xTabDividerWidth:宽度
    xTabDividerHeight:高度
    xTabDividerColor:颜色
    xTabDividerGravity:是否居中
    • Fragement【都是这样,这里就显示一个】
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:text="第一页"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>
    • 主页Java代码
    package com.example.mslinbill.main;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.fragment.app.Fragment;
    import androidx.viewpager2.adapter.FragmentStateAdapter;
    import androidx.viewpager2.widget.ViewPager2;
    
    import android.os.Bundle;
    import android.widget.Toast;
    
    import com.androidkun.xtablayout.XTabLayout;
    import com.example.mslinbill.R;
    import com.example.mslinbill.fragment.SubPage_BookKeeping_Fragment;
    import com.example.mslinbill.fragment.SubPage_Wages_Fragment;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        //XTabLayout
        XTabLayout tab;
        ViewPager2 pagers;
        List<Fragment> list = new ArrayList<>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            /**
             * XTabLayout的操作
             */
            //1.找到XTablayout
            tab = findViewById(R.id.tab);
            pagers =findViewById(R.id.pagers);
    
            //2.动态添加内容,后面的图片,根据前面的图片选中设置
            tab.addTab(tab.newTab().setText("第一页").setIcon(R.drawable.tab_bookkeep));
            tab.addTab(tab.newTab().setText("第二页").setIcon(R.drawable.tab_wages));
    
    
            //3.设置切换效果
            tab.setOnTabSelectedListener(new XTabLayout.OnTabSelectedListener() {
                //当前选中的Tab
                @Override
                public void onTabSelected(XTabLayout.Tab tab) {
                    //获取当前导航卡的位置及文本
                    int position = tab.getPosition();
                    pagers.setCurrentItem(position);
                    //提示词
                    Toast.makeText(MainActivity.this,position+"---"+tab.getText().toString(), Toast.LENGTH_SHORT).show();
                }
    
                //Tab没被选中的方法
                @Override
                public void onTabUnselected(XTabLayout.Tab tab) {
                }
    
                //Tab被重新选中的方法
                @Override
                public void onTabReselected(XTabLayout.Tab tab) {
                }
            });
    
            //添加Fragement
            addFragement();
    
            pagers.setAdapter(new FragmentStateAdapter(getSupportFragmentManager()) {
                @NonNull
                @Override
                public Fragment getItem(int position) {
                    return list.get(position);
                }
    
    
                //设置长度
                @Override
                public int getItemCount() {
                    return list.size();
                }
            });
    
            //禁止滑动
    //        pagers.setUserInputEnabled(false);
    
            /**
             * 官方说法:添加回调
             * 自我理解:连动按钮和页面
             */
            pagers.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
                @Override
                public void onPageSelected(int position) {
                    super.onPageSelected(position);
                    //设置指定位置上的导航块被选中
                    tab.getTabAt(position).select();
                }
            });
    
    
        }
    
        //添加Fragement
        private void addFragement(){
            //添加Fragment
            list.add(new Fragment1());
            list.add(new Fragment2());
        }
    }
    • Fragement代码
    public class Fragment1 extends Fragment {
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            return inflater.inflate(R.layout.subpapge1 container, false);
        }
    }
  • 相关阅读:
    org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback.....Parameter index out of range (1 > number of parameters, which is 0).;
    启动tomcat报错 Could not reserve enough space for object heap的解决办法
    JavaScript里面三个等号和两个等号有什么区别?
    powerdesigner 绘制表关系和导出sql
    ORA-00911: 无效字符
    java heep space错误解决办法
    jsp下拉选框赋值(在js里进行)
    js image转canvas不显示
    调试web worker (动态生成的worker)
    threeJS射线拾取机制及案例
  • 原文地址:https://www.cnblogs.com/hahayixiao/p/13725960.html
Copyright © 2011-2022 走看看