标签: android-tablayout

Android - onTabSelected 第一次使用 customView 时未调用

我正在使用TabLayouta 和 a 组合,ViewPager并且我已经为我的选项卡设置了自定义视图。当选择和取消选择选项卡时,一切都按预期工作(自定义视图根据所选/未选择的选项卡而更改)。
问题是在第一次启动时,永远不会调用 onTabSelected 方法。
这是我的活动:

setupViewPager(viewPager);    
tabLayout.setupWithViewPager(viewPager);     

for (int i = 0; i < tabLayout.getTabCount(); i++) {
    tabLayout.getTabAt(i).setCustomView(getViewAt(i));
}

tabLayout.addOnTabSelectedListener(this);    
Run Code Online (Sandbox Code Playgroud)

这是setupViewPager和其他方法:

private void setupViewPager(ViewPager viewPager) {
    MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getChildFragmentManager(), getContext(), startDate, endDate);
    viewPager.setAdapter(adapter);
}    

private View getViewAt(int i){
    final Date currentDate = CalendarUtility.addDay(startDate, i);
    View v = LayoutInflater.from(getContext()).inflate(R.layout.layout_custom_tab, null);
    TextView day = (TextView) v.findViewById(R.id.day);
    TextView num = (TextView) v.findViewById(R.id.num);
    day.setText(CalendarUtility.getDayOfWeek(currentDate));
    num.setText(CalendarUtility.getDayOfMonth(currentDate));
    return v;
}

@Override
public void onTabSelected(TabLayout.Tab tab) …
Run Code Online (Sandbox Code Playgroud)

tabs android android-viewpager android-tablayout

2
推荐指数
1
解决办法
4597
查看次数

Android:如何更改选项卡布局中各个选项卡的宽度?

我正在尝试在选项卡布局开始时调整通知选项卡的大小,如图所示,

在此输入图像描述

到目前为止,我可以将所有三个选项卡如图所示,但宽度除外。到目前为止我的进展如下,

在此输入图像描述

所以我的问题是,如何调整选项卡布局中各个项目的大小?我搜索了很多页面并尝试阅读文档,但没有找到任何有用的东西。

先感谢您。

android android-layout android-tablayout

2
推荐指数
1
解决办法
1915
查看次数

ViewPager2禁用过渡动画

我将 ViewPager2 与 TabLayout 连接。其他提到 ViewPager 的帖子提供了重写 setCurrentItem(position, false) 的方法,其中 false 会禁用平滑滚动。但是,TabLayoutMediator 调用 onTabSelected(TabLayout.Tab tab) ,后者调用 viewpager.setCurrentItem(postion, true)。如果 TabLayoutMediator 以及 ViewPager2 都是最终的,我如何覆盖此行为?

已经尝试过:

viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            viewPager.setCurrentItem(position, false);
        }
    });
Run Code Online (Sandbox Code Playgroud)

并像这样重写 onTabSelected :

     tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(viewPager.getPosition(), false);
        }
         ......
    }
Run Code Online (Sandbox Code Playgroud)

android android-tablayout android-viewpager2

2
推荐指数
1
解决办法
3750
查看次数

ViewPager2 selectCurrentItem - 选择选项卡,但在此选项卡内放置错误的片段

我有基本的 ViewPager2 和 Tablayout - 在每个页面中我都有不同的片段。当我需要不从第一个(默认)选项卡打开此视图时,我正在这样做:

 viewPager.currentItem = selectedTabPosition
Run Code Online (Sandbox Code Playgroud)

此代码选择选项卡,但在其中打开第一个选项卡的片段!仅当我通过点击来选择选项卡时 - 我才能在每个选项卡中看到正确的片段。我也尝试使用 Tablayout 进行选择,如下所示:

tabLayout.getTabAt(position)?.select()
Run Code Online (Sandbox Code Playgroud)

但这段代码没有帮助,也可以解决这个错误。我也尝试过设置viewPager.currentItem-post / postDelay但这也不起作用。

也许我失去了一些东西?或者这是 ViewPager2 中的错误?

(编辑 - ViewPager 代码)

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    setupPagerAdapter()
}

private fun setupPagerAdapter() {
    val adapter = MainDocumentScreenPagerAdapter(this)

    binding?.viewPager?.letUnit {
        it.adapter = adapter
        binding?.tabsPagerView?.attachViewPager(requireContext(), it, adapter)

        // set tab
        it.currentItem = params.pageType.ordinal
}
Run Code Online (Sandbox Code Playgroud)

适配器代码

class MainDocumentScreenPagerAdapter (fragment: Fragment) : ViewPager2TitleAdapter(fragment) {

override fun getItemCount(): Int = DocumentPageType.values().size

override fun createFragment(position: …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-tablayout android-viewpager2

2
推荐指数
1
解决办法
2250
查看次数

我正在尝试在 Jetpack compose 中使用 Tab Row,我增加了指示器高度,现在我的文本隐藏在它后面如何解决?

我正在尝试在 Jetpack compose 中使用 Tab Row,我增加了指示器高度,现在我的文本隐藏在它后面。有没有可以将我的文本放在选项卡指示器或其他任何东西的顶部

这是我的主要活动,我使用 Scaffold 并调用了一个用于创建 TabLayout 的函数

Scaffold(backgroundColor = Color.Black) {
            val tabs = listOf(
                "Option1 ", "Option 2"
            )
            val scope= rememberCoroutineScope()
            val pagerState= rememberPagerState(pageCount = tabs.size)
            ChooseDeliveryPickup(
                pagerState,
                tabs,
                { Log.e("Hello","Yes")},
                scope
            )
        }
Run Code Online (Sandbox Code Playgroud)

这是函数

@ExperimentalPagerApi
@Composable
fun ChooseDeliveryPickup(
    pagerState: PagerState,
    tabs: List<String>,
    onClick: () -> Unit,
    scope: CoroutineScope
) {
    TabRow(
        selectedTabIndex = pagerState.currentPage, backgroundColor = Color(0xFFEAECED),
        modifier = Modifier
            .padding(16.dp)
            .height(40.dp)
            .width(295.dp)
            .clip(RoundedCornerShape(12.dp)),
        indicator = { tabPositions ->
            Box(
                Modifier
                    .tabIndicatorOffset(tabPositions[pagerState.currentPage])
                    .height(139.dp) …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-tablayout android-jetpack-compose

2
推荐指数
1
解决办法
4736
查看次数

工具栏不与TabLayout合并

Toolbar当用户在的一个TabLayout标签(由提供ViewPager)中滚动时,我想让折叠折叠起来。

这是我想要的功能:

在此处输入图片说明

在此处输入图片说明

但是,我的布局不仅不滚动,而且还切断了底部的内容(确切地说,它切断了48dp -工具栏的高度):

在此处输入图片说明

我使用ViewPager将每个片段显示为选项卡。碎片由一个简单的ScrollView持有TextView。这是布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/ueber_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:layout_scrollFlags="scroll|enterAlways" />

        <android.support.design.widget.TabLayout
            android:id="@+id/ueber_tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:tabIndicatorColor="@android:color/white"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/ueber_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

每个片段具有以下布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/ueber_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="#000000"
        android:linksClickable="false"
        android:textColorLink="#000000"
        android:fontFamily="serif"
        android:padding="16dp"/>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

ViewPager由ViewPagerAdapter设置:

ViewPager viewPager = (ViewPager) findViewById(R.id.ueber_viewpager);

ViewPagerAdapter adapter = new …
Run Code Online (Sandbox Code Playgroud)

android android-toolbar androiddesignsupport android-tablayout

1
推荐指数
1
解决办法
2340
查看次数

使用ViewPagerAdapter在TabLayout中未调用片段onCreateView方法

我已按照此链接实施使用Tabs的 tablayout Android Material Design

现在我做了什么,我使用片段代替Activity for tablayout.

以下是代码: -

public class HopitalTabLayoutFragment extends Fragment {

private TabLayout tabLayout;
private ViewPager viewPager;

public HopitalTabLayoutFragment() {

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_hopital_tab_layout, container, false);

    viewPager = (ViewPager)view. findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout)view. findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    return view;
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());

    adapter.addFragment(new OneFragment(), "ONE");
    adapter.addFragment(new TwoFragment(), "TWO");
    adapter.addFragment(new ThreeFragment(), "THREE");

    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager navigation-drawer android-tablayout

1
推荐指数
1
解决办法
2380
查看次数

停止Android TabLayout自动加载下一页

我已经意识到在Android中使用标签布局时,它总是会加载触摸它的标签,即之前的标签和标签,因此当您翻页时它会被加载.

但是,我从服务器加载了大量的内容和图像,这会导致大量的数据和内存使用,我经常会得到OOM errors,我正在使用Glide高效地显示图像.

基本上我需要知道3件事:

  1. 如何停止选项卡布局加载除当前页面之外的任何页面
  2. clear/recycle/delete在到达新页面以清除内存后如何使用旧选项卡
  3. 如何在返回时始终刷新选项卡

tabs android view android-viewpager android-tablayout

1
推荐指数
1
解决办法
2567
查看次数

Android TabLayout固定模式但权重不同

我有4个标签,其中一个有其他的双倍尺寸,所以重量将是:20%40%20%20%

但是当我使用TabLayout(来自android设计支持库)将模式设置为固定时,那么我将被迫拥有相同的权重!这是应用宽度的源代码的一部分:

private void updateTabViewLayoutParams(LinearLayout.LayoutParams lp) {
    if (mMode == MODE_FIXED && mTabGravity == GRAVITY_FILL) {
        lp.width = 0;
        lp.weight = 1;
    } else {
        lp.width = LinearLayout.LayoutParams.WRAP_CONTENT;
        lp.weight = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我需要不同的重量,以适应​​屏幕宽度.任何方式来应​​用我自己的重量?

android android-design-library androiddesignsupport android-tablayout

1
推荐指数
1
解决办法
1286
查看次数

每5秒钟自动滑动一次标签项

我已经在我的android应用程序中创建了3个标签项的标签控件。

<android.support.design.widget.TabLayout
        android:background="@color/colorPrimary"
        android:layout_alignParentTop="true"
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        >
</android.support.design.widget.TabLayout>
Run Code Online (Sandbox Code Playgroud)

在的帮助下PagerAdapter,其工作正常。但是现在,我想自动制作。也就是说,每5秒钟,该标签应自动滑动到下一个。它将继续直到用户在屏幕上触摸。如何在我的应用程序中添加此计时功能?

我的PagerAdapter课是

public class PagerAdapter  extends FragmentStatePagerAdapter{
    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment frag=null;
        switch (position){
            case 0:
                frag=new GameFragment();
                break;
            case 1:
                frag=new MovieFragment();
                break;
            case 2:
                frag=new StudyFragment();
                break;
        }
        return frag;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title=" ";
        switch (position){
            case 0:
                title="Game";
                break;
            case 1: …
Run Code Online (Sandbox Code Playgroud)

android timer android-tablayout

1
推荐指数
1
解决办法
774
查看次数