我正在关注这个例子..
我有一个问题,当我在ViewPager 相应的屏幕上滑动时,fragment但是当我从左向右或从右向左滑动并选择上一个选项卡时,选项卡指示符出现在新选择的选项卡上,但各自fragment不显示ViewPager.请帮助我,我哪里出错了?
android android-fragments android-viewpager android-tablayout
我正在使用android支持设计tablayout.这是我的代码:
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content""
app:tabGravity="center"
app:tabMode="scrollable"
/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Run Code Online (Sandbox Code Playgroud)
我的问题是标签总是左对齐.但是,我想将选定的选项卡居中(即使在开头,第一个(选定的)选项卡也应居中).有没有办法做到这一点?谢谢.
center-align android-viewpager android-tabs android-tablayout
我TabLayout在我的应用中使用了Tabbed导航.我有一个非常奇怪的问题,我使用此代码创建了4个选项卡:
private int[] tabIcons = {R.drawable.navigation_timeline_icon_selector, R.drawable.navigation_feed_icon_selector,
R.drawable.navigation_messages_icon_selector, R.drawable.navigation_notification_icon_selector};
TabLayout tabLayout = setTabLayout();
if (tabLayout != null) {
for (int i = 0; i < 4; i++) {
tabLayout.getTabAt(i).setIcon(tabIcons[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
tabIcon中的每个项目都是selector选定状态和非选定状态.所有图标选择器配置如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/navigation_timeline_selected_icon" android:state_selected="true"/>
<item android:drawable="@drawable/navigation_timeline_selected_icon" android:state_pressed="true"/>
<item android:drawable="@drawable/navigation_timeline_icon" />
</selector>
Run Code Online (Sandbox Code Playgroud)
问题是当应用程序启动时,第一个选定的选项卡(索引0)不使用选定的状态图标.相反,它使用非选择状态.
更详细的解释是这个问题的截图,首次启动我的选项卡如下所示:
相反,它应该是这样的:
更改页面后,所有图标都恢复为完整功能,并且正确选择了所选状态.
我尝试使用该TabLayout.Tab select()方法,但结果与使用的图标相同是未选择的图标.
有人知道我能做些什么来解决它吗?
我按照官方文档设置了一个带有 ViewPager2 的 TabLayout。我以这种方式使用 TabLayoutMediator 将 TabLayout 与 ViewPager2 连接起来:
TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position ->
tab.setIcon(getTabIcon(position))
tab.text = getTabTitle(position)
}.attach()
Run Code Online (Sandbox Code Playgroud)
但是 Leak Canary 检测到似乎与 TabLayout 和 TabLayoutMediator 相关的内存泄漏。日志如下:
2020-05-13 17:57:32.914 D/LeakCanary: ????
2020-05-13 17:57:32.914 D/LeakCanary: ? GC Root: Local variable in native code
2020-05-13 17:57:32.914 D/LeakCanary: ?
2020-05-13 17:57:32.914 D/LeakCanary: ?? android.net.ConnectivityThread instance
2020-05-13 17:57:32.914 D/LeakCanary: ? Leaking: NO (PathClassLoader? is not leaking)
2020-05-13 17:57:32.914 D/LeakCanary: ? Thread name: 'ConnectivityThread'
2020-05-13 17:57:32.914 D/LeakCanary: ? ? ConnectivityThread.contextClassLoader
2020-05-13 17:57:32.914 D/LeakCanary: …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用导航抽屉,里面有5个片段.在一个片段中,我在设计支持库中引入了TabLayout,其中包括2个片段.一切正常,除非我离开具有TabLayout的片段并切换回它,所有内容都消失了.
在TabLayout的每个片段中,我有一个带有ListView的SwipeRefreshLayout,它们都不会在切换时显示任何内容.
我也注意到TabLayout开始表现得很奇怪.奇怪的是我的意思是白色指示器开始跳跃,你可以把它仍然保持在两个标签的中间......
所以我错过了TabLayout行为如此奇怪的事情吗?
这里的代码:包含TabLayout的片段:
public class MainFragment extends Fragment {
private static String locale;
private static ViewPager viewPager;
private static TabLayout tabLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Utils.changeLanguage(getActivity());
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.MyStyle);
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);
View view = localInflater.inflate(R.layout.fragment1, container, false);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
tabLayout = (TabLayout) view.findViewById(R.id.tabs);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setupViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
LinesTabsAdapter adapter = …Run Code Online (Sandbox Code Playgroud) android listview android-fragments android-design-library android-tablayout
我有一个工作TabLayout,我正在尝试动态更新选项卡文本颜色,更改选项卡时.为此,我setTabTextColors()在我的TabLayout上调用方法:
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tabLayout.setTabTextColors(newColorStateList);
}
(...)
});
Run Code Online (Sandbox Code Playgroud)
由于某种原因,文本颜色不会更新.有谁知道如何动态更新标签文本颜色?
我正在使用Design Support Library v22.2.0.
android android-support-library android-design-library android-tablayout
我正在使用viewpager和标签布局
viewPager.setAdapter(Adapter);
tablayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
int cPage;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
cPage = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Run Code Online (Sandbox Code Playgroud)
现在,当我滑动选定的标签颜色正在改变,但当我打电话
viewPager.setCurrentItem(1, true);
Run Code Online (Sandbox Code Playgroud)
它没有改变新的标签布局颜色.说我有2个标签,当我是第一个它为第一个标签设置文本颜色绿色和当我滑动它给第二个标签颜色绿色..但当我打电话
viewPager.setCurrentItem(1, true);
Run Code Online (Sandbox Code Playgroud)
在我的第一个标签是绿色而不是第二个标签
如何为未选中的选项卡设置文本颜色?我知道您可以通过执行以下操作设置TabLayout的文本颜色:setTabTextColors
我遇到了android TabLayout的棘手问题
import android.support.design.widget.TabLayout;
Run Code Online (Sandbox Code Playgroud)
当我选择左侧最前面的选项卡,然后向右滚动选项卡并选择右侧最前面的选项卡时,TabLayout首先再次显示左侧选项卡,然后滚动到右侧的选定选项卡.这是我的设置代码
void setupTabs(ViewPager viewPager, TabLayout tabLayout) {
ProductsPagerAdapter adapter = new ProductsPagerAdapter(getChildFragmentManager(), rootCategory.getChildCategories());
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
setStartingSelection(viewPager, adapter);
}
private void setStartingSelection(ViewPager viewPager, ProductsPagerAdapter adapter) {
for(int i = 0 ; i < adapter.getCount(); i++){
String title = (String) adapter.getPageTitle(i);
if(title.equals(selectedCategory.getName())){
viewPager.setCurrentItem(i);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
和布局
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/toolbar_color"
app:navigationIcon="@drawable/ic_back_white"
app:title="@string/title_transport"
app:titleTextColor="@color/title_color"/>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"
app:tabTextColor="@color/white"
app:tabIndicatorColor="@color/tab_indicator"
app:tabGravity="fill"/> …Run Code Online (Sandbox Code Playgroud) 我在尝试在下方添加一条线时遇到了麻烦TabLayout,但它必须在选择线后面.应该是这样的:
我已经尝试添加自定义视图,但每个标签内部都有一些边距,所以没有解决.
有任何想法吗?
这就是我现在所得到的:
这是我如何在XML上添加它:
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="60dp"
app:tabBackground="@color/white"
app:tabIndicatorColor="@color/colorAccent"
app:tabTextColor="@color/white"/>
Run Code Online (Sandbox Code Playgroud)
这就是我通过代码做的事情:
private void configureTabLayout() {
TabLayout.Tab tabHome = mTabLayout.newTab().setIcon(R.drawable.ic_home_cinza);
TabLayout.Tab tabEmprestimos = mTabLayout.newTab().setIcon(R.drawable.ic_emprestimos_cinza);
TabLayout.Tab tabPersonal = mTabLayout.newTab().setIcon(R.drawable.ic_usuario_cinza);
View root = mTabLayout.getChildAt(0);
if (root instanceof LinearLayout) {
((LinearLayout) root).setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
GradientDrawable drawable = new GradientDrawable();
drawable.setColor(getResources().getColor(R.color.silver));
drawable.setSize(2, 1);
((LinearLayout) root).setDividerPadding(10);
((LinearLayout) root).setDividerDrawable(drawable);
}
mTabLayout.addTab(tabHome);
mTabLayout.addTab(tabEmprestimos);
mTabLayout.addTab(tabPersonal);
mTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
}
Run Code Online (Sandbox Code Playgroud) android ×9
android-tabs ×1
center-align ×1
icons ×1
leakcanary ×1
listview ×1
memory-leaks ×1
tabbar ×1
tabs ×1
xml ×1