我正在使用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) 我正在尝试在选项卡布局开始时调整通知选项卡的大小,如图所示,
到目前为止,我可以将所有三个选项卡如图所示,但宽度除外。到目前为止我的进展如下,
所以我的问题是,如何调整选项卡布局中各个项目的大小?我搜索了很多页面并尝试阅读文档,但没有找到任何有用的东西。
先感谢您。
我将 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) 我有基本的 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
我正在尝试在 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) 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
我已按照此链接实施使用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
我已经意识到在Android中使用标签布局时,它总是会加载触摸它的标签,即之前的标签和标签,因此当您翻页时它会被加载.
但是,我从服务器加载了大量的内容和图像,这会导致大量的数据和内存使用,我经常会得到OOM errors,我正在使用Glide高效地显示图像.
基本上我需要知道3件事:
clear/recycle/delete在到达新页面以清除内存后如何使用旧选项卡我有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
我已经在我的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)