TextView 取代 Tablayout实现滑动布局

TextView 取代 Tablayout实现滑动布局
  • 准备 HomeViewPager + HomeViewPagerAdapter + Fragment

HomeViewPager.java

package xxx.com.quicktv.widget;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * ================================================
 * 作    者:zhoujianan
 * 版    本:v1.0
 * 创建日期:2019/9/25
 * 描    述:
 * 修订历史:
 * ================================================
 */
public class HomeViewPager extends ViewPager {
    private boolean mScrollable;

    public HomeViewPager(@NonNull Context context) {
        super(context);
    }

    public HomeViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }


    public  void setScrollable(boolean scrollable) {
        mScrollable = scrollable;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (mScrollable) {
            return super.onInterceptTouchEvent(ev);
        } else {
            return false;
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (mScrollable) {
            return super.onTouchEvent(ev);
        } else {
            return false;
        }
    }
}

HomeViewPagerAdapter.java

package xxx.com.quicktv.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

/**
 * ================================================
 * 作    者:zhoujianan
 * 版    本:v1.0
 * 创建日期:2019/9/25
 * 描    述:
 * 修订历史:
 * ================================================
 */
public class HomeViewPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> mFragments;

    public HomeViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        mFragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }
}

  • Fragment若干

VodFragment.java

package xxx.com.quicktv.module.vod;

import android.os.Bundle;

import xxx.com.quicktv.R;
import xxx.com.quicktv.module.base.BaseFragment;

/**
 * ================================================
 * 作    者:zhoujianan
 * 版    本:v1.0
 * 创建日期:2020/7/10
 * 描    述:
 * 修订历史:
 * ================================================
 */
public class VodFragment extends BaseFragment{
    @Override
    protected int attachLayoutRes() {
        return R.layout.fragment_vod;
    }

    @Override
    protected void initInjector() {

    }

    @Override
    protected void initViews(Bundle savedInstanceState) {

    }

    @Override
    protected void updateViews(boolean isRefresh) {

    }
}

  • 开始制作:
package xxx.com.quicktv.module.home;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.OnClick;
import xxx.com.quicktv.R;
import xxx.com.quicktv.adapter.HomeViewPagerAdapter;
import xxx.com.quicktv.module.base.BaseActivity;
import xxx.com.quicktv.module.live.LiveFragment;
import xxx.com.quicktv.module.profile.ProfileFragment;
import xxx.com.quicktv.module.vod.VodFragment;
import xxx.com.quicktv.widget.HomeViewPager;

public class HomeActivity extends BaseActivity {
    @BindView(R.id.home_vp)
    HomeViewPager mHomeViewPager;
    @BindView(R.id.home_vod_tv)
    TextView mHomeVodTv;
    @BindView(R.id.home_live_tv)
    TextView mHomeLiveTv;
    @BindView(R.id.home_profile_tv)
    TextView mProfileTv;

    private View mCurrentSelectNavView;
    private VodFragment mVodFragment = new VodFragment();
    private LiveFragment mLiveFragment = new LiveFragment();
    private ProfileFragment mProfileFragment = new ProfileFragment();
    private ArrayList<Fragment> mFragments = new ArrayList<>();
    private HomeViewPagerAdapter mPagerAdapter;
    private List<View> mNavViews;

    @Override
    protected int attachLayoutRes() {
        return R.layout.activity_home;
    }

    @Override
    protected void initInjector() {

    }

    @Override
    protected void initViews(Bundle savedInstanceState) {
        mFragments.add(mVodFragment);
        mFragments.add(mLiveFragment);
        mFragments.add(mProfileFragment);
        mPagerAdapter = new HomeViewPagerAdapter(getSupportFragmentManager(), mFragments);
        mHomeViewPager.setAdapter(mPagerAdapter);
        mNavViews = new ArrayList<>();
        mNavViews.add(mHomeVodTv);
        mNavViews.add(mHomeLiveTv);
        mNavViews.add(mProfileTv);
    }

    @Override
    protected void updateViews(boolean isRefresh) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @OnClick({R.id.home_vod_tv, R.id.home_live_tv, R.id.home_profile_tv})
    public void onViewClicked(View view) {
        refreshSelectNavView(view);
        mHomeViewPager.setCurrentItem(mNavViews.indexOf(view), false);

    }

    public void refreshSelectNavView(View view) {
        if (mCurrentSelectNavView == view) {
            return;
        }
        if (mCurrentSelectNavView != null) {
            mCurrentSelectNavView.setSelected(false);
        }
        view.setSelected(true);
        mCurrentSelectNavView = view;
    }
}

  • 整体布局: activity_home.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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:background="#FF1C1C1E"
    tools:context="yoostar.com.quicktv.module.home.HomeActivity">

    <xxx.com.quicktv.widget.HomeViewPager
        android:id="@+id/home_vp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@id/home_vod_tv"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </xxx.com.quicktv.widget.HomeViewPager>
    
    <TextView
        android:paddingTop="@dimen/_8px_in720p"
        android:id="@+id/home_vod_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/home_vod_selector"
        android:gravity="center_horizontal"
        android:text="@string/home_vod"
        android:textColor="@drawable/home_tab_tv_selector"
        android:textSize="@dimen/_20px_in720p"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/home_live_tv"/>


    <TextView
        android:paddingTop="@dimen/_8px_in720p"
        android:id="@+id/home_live_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/home_live_selector"
        android:gravity="center_horizontal"
        android:text="@string/home_live"
        android:textColor="@drawable/home_tab_tv_selector"
        android:textSize="@dimen/_20px_in720p"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/home_vod_tv"
        app:layout_constraintRight_toLeftOf="@id/home_profile_tv"/>

    <TextView
        android:paddingTop="@dimen/_8px_in720p"
        android:id="@+id/home_profile_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/home_user_selector"
        android:gravity="center_horizontal"
        android:text="@string/home_profile"
        android:textColor="@drawable/home_tab_tv_selector"
        android:textSize="@dimen/_20px_in720p"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/home_live_tv"
        app:layout_constraintRight_toRightOf="parent"/>


</android.support.constraint.ConstraintLayout>

home_tab_tv_selector.xml
注意 TextView设置字体颜色的时候,item android :color,这里使用的是color而不是常见的drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FFE60615" android:state_selected="true"/>
    <item android:color="#FFE60615" android:state_pressed="true"/>
    <item android:color="@color/color_white"/>
</selector>
  • 比较:就Tablayout而言,这种直接使用TextView,可以很方便的设置tab下的cusor样式,之前很难去修改tab的光标样式,其他都没有什么不同的地方,如果想了解TabLayout + ViewPager + Fragment ,请到https://blog.csdn.net/weixin_37716758/article/details/96846779,进一步进行了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值