标签: android-tablayout

选择选项卡而不调用 OnTabSelectedListener

我正在尝试在我的活动中使用 TabLayout 。每个选项卡将用户带到一个片段。

  1. 假设用户位于具有fragment1 的Tab1 上。
  2. 他单击包含fragment2 的Tab2。
  3. 现在,当用户位于 Tab2 上并按后退按钮时,我希望用户返回到 Tab1 上的 Fragment1。我通过执行此操作来做到这一点getFragmentManager().popBackStack()。现在我还想将选定的选项卡更新为 Tab1。

有什么方法可以在 TabLayout 中将选项卡标记为选定状态而不调用 TabSelectedListener 吗?

android android-tablayout

5
推荐指数
2
解决办法
2229
查看次数

使用 ViewPager 从 Activity 到 Fragment 的通信

我有一个 Activity 和两个 Fragment,其中tablayout包含viewpager. 现在我可以通过实现谷歌的指南回调接口从片段到活动进行通信。但是我怎样才能以另一种方式从 Activity 到 Fragment进行通信呢?如果活动中发生了一些事情(外部事件),我想更新片段。我设法获得了 Frag1 片段

MyFragmentPagerAdapter a = (MyFragmentPagerAdapter) viewPager.getAdapter();
Frag1 frag = (Frag1) a.getItem(0);
Run Code Online (Sandbox Code Playgroud)

但是当我在 frag 上调用公共方法时,我得到一个 IllegalStateException: Fragment not Attached to Activity 可能是因为 getItem(0) 返回 Frag1 的新实例并且尚未附加...有没有人可以为此提供干净的解决方案整个 Viewpager -> Activity 到 Fragment 通信?

一些代码给你:

在活动中:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        if (viewPager != null) {
            viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager()));
        }

        TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
        if (tabLayout != null) {
            tabLayout.setupWithViewPager(viewPager); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-activity android-tablayout

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

Android TabLayout高度不随字体大小增加

以下是我的代码TabLayout

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    app:tabIndicatorHeight="0dp"
    app:tabSelectedTextColor="@android:color/white"
    app:tabTextColor="@color/city_grey"
    app:tabTextAppearance="@style/DashboardTabLayoutTextAppearance"
    android:paddingTop="@dimen/dp10"
    android:paddingBottom="@dimen/dp10"
    app:tabPaddingStart="@dimen/dp20"
    app:tabPaddingEnd="@dimen/dp20"
    app:tabMode="scrollable"
    app:tabGravity="fill"/>
Run Code Online (Sandbox Code Playgroud)

而 DashboardTabLayoutTextAppearance 是

<style name="DashboardTabLayoutTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textSize">@dimen/sp40</item>
    <item name="android:fontFamily">sans-serif-light</item>
</style>
Run Code Online (Sandbox Code Playgroud)

可以看出,TabLayout高度已设置为wrap_content,选项卡文本textSize已发送到40sp

因此,TabLayout高度自然应该根据文本高度增加。但在某些设备上,它会垂直剪切文本。

这是 7 英寸标签上的结果 在此输入图像描述

而在 5.5 英寸手机上则运行得非常好 在此输入图像描述

我尝试使用layout_marginpadding属性,但它没有解决问题。

编辑1:添加代码以显示我正在初始化TabLayoutViewPager

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
    adapter.addFragment(DashboardWeeklyFragment.newInstance(weeklyData), "Weekly");
    adapter.addFragment(DashboardMonthlyFragment.newInstance(monthlyData), "Monthly");
    adapter.addFragment(DashboardDailyFragment.newInstance(dailyData), "Daily");
    viewPager.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)

android android-tablayout

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

将 SwipeRefreshLayout 与 Viewpager 和 Tablayout 结合使用

我有 3 个选项卡,这些选项卡在 swiperefreshlayout 中有 recyclerview。我无法通过滑动更改这些选项卡。我认为这是因为,我的触摸事件是由 swiperefreshlayout 而不是 tablayout 接收的。如何解决我的问题?

以下是我的布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout 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:id="@+id/news_swipe_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.nabinkhadka.hamrodang.activity.NewsActivity"
    tools:showIn="@layout/app_bar_main">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/news_recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical" />

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

</android.support.v4.widget.SwipeRefreshLayout>
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 如果我将 ViewPager 移到 RecyclerView 上方,则滑动可以工作,但无法看到 Recyclerview。
  2. 如果我为这两个创建一个相对布局并将每个放置在另一个之上,我将无法在其中一个上进行触摸事件

我该如何解决?

谢谢你!

android android-viewpager swiperefreshlayout android-tablayout

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

在使用 TabLayout 和 ViewPager 的 Fragment 内启用滚动

你好!我希望这个视图可以滚动:

在此输入图像描述

正如您所看到的,TAB1 中的“临时内容”只是用来模拟可能出现的临时内容。

我现在想做的是使整个页面可滚动。我设法做的是使 TAB1 的内容(即 TabLayout 的内容)可滚动,但这不是我想要做的。正如所描述的,整个页面应该是。

这是持有视图的布局:

<?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"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context="at.codecrane.whosnext.MainActivity">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="200dp">

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:srcCompat="@android:color/darker_gray" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="100dp"
                android:layout_height="100dp"
                app:srcCompat="@drawable/ic_face"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="32dp" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageView3"
                android:layout_centerHorizontal="true"
                android:text="Temp Name"
                android:textSize="18sp" />
        </RelativeLayout>



        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.design.widget.TabLayout
                android:id="@+id/tab_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabIndicatorColor="@color/colorPrimary">

                <android.support.design.widget.TabItem
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="General" />

                <android.support.design.widget.TabItem
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Statistics" />

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

        </android.support.v4.view.ViewPager>
    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是 ViewPager-Content 的片段布局:

<!-- TODO: Update blank fragment …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-tablayout

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

如何沿着 Viewpager 显示圆形选项卡指示器?

我想显示一个选项卡指示器,如下图所示。

选项卡指示器

我正在使用viewpager。我已经尝试过使用 viewpager 的 TabLayout,其中我们只能调整选项卡指示器的颜色和高度。我怎样才能实现这个。

android android-layout android-tabs android-tablayout

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

java.lang.IllegalStateException:查看 ID 为 -1

我在Lenovo K50a40、OS 6.0 和其他一些设备的crashlytics中发现了以下崩溃日志。我无法从此日志中跟踪异常,也无法找到此异常来自我的应用程序的任何线索。我在社区中没有发现任何人之前遇到过类似的问题。如果您对此有所了解,请分享您的见解。

java.lang.IllegalStateException: View with id -1: android.support.design.widget.TabLayout$TabView#onMeasure() did not set the measured dimension by calling setMeasuredDimension()
    at android.view.View.measure(View.java:19199)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6124)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1723)
    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1275)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:650)
    at android.support.design.widget.TabLayout$SlidingTabStrip.onMeasure(TabLayout.java:1859)
    at android.view.View.measure(View.java:19169)
    at android.widget.HorizontalScrollView.measureChildWithMargins(HorizontalScrollView.java:1259)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:223)
    at android.widget.HorizontalScrollView.onMeasure(HorizontalScrollView.java:315)
    at android.support.design.widget.TabLayout.onMeasure(TabLayout.java:1030)
    at android.view.View.measure(View.java:19169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6124)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1723)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:788)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:648)
    at android.support.design.widget.AppBarLayout.onMeasure(AppBarLayout.java:234)
    at android.view.View.measure(View.java:19169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6124)
    at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:719)
    at android.support.design.widget.AppBarLayout$Behavior.onMeasureChild(AppBarLayout.java:1008)
    at android.support.design.widget.AppBarLayout$Behavior.onMeasureChild(AppBarLayout.java:787)
    at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:789)
    at android.view.View.measure(View.java:19169)
    at android.widget.RelativeLayout.measureChild(RelativeLayout.java:786)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:560)
    at android.view.View.measure(View.java:19169)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6124)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:223)
    at …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-view android-tablayout

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

如何将菜单设置为 AppBarLayout

我是编程新手,我想添加一个设置菜单按钮。

如图所示,我的应用程序不显示三点按钮。

我的应用程序

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabs = findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.vueSatellite:
                Toast.makeText(this, "Hi", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

<androidx.coordinatorlayout.widget.CoordinatorLayout 
    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"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager …
Run Code Online (Sandbox Code Playgroud)

java settings android android-studio android-tablayout

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

如何使用 Viewpager2 和 Mediator Tab Layout 动态添加和删除片段页面

我需要根据服务器配置文件在运行时将片段添加到 viewpager2 以及选项卡。我见过的大多数 viewpager2 资源都展示了使用新 TabMediator 选项卡布局的静态 viewpager2。我正在跳过 viewpager,因为我需要添加 viewpager2 支持的 RTL 和垂直滚动。

我最关心的是当我添加和删除片段时如何跟踪特定页面/片段的索引。已完成教程和代码作为示例。

android android-fragments android-tablayout android-viewpager2

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

无法更改 com.google.android.material.tabs.TabLayout 中 com.google.android.material.tabs.TabItem 的文本大小

为了使 TabItem 文本变大,我缺少什么?我已经解决了所有类似的问题并尝试了许多不同的陈述。我尝试将样式应用于 TabLayout 以及 TabItem,但似乎没有任何效果,文本大小也没有改变。Material Design 版本中是否缺少此功能?谢谢

活动主文件

<com.google.android.material.tabs.TabLayout
    style="@style/TabTheme"
    android:layout_width="694dp"
    android:layout_height="72dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:tabIndicatorHeight="6dp"
    app:tabTextAppearance="@style/TabTheme">

    <com.google.android.material.tabs.TabItem
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Clock In" />
Run Code Online (Sandbox Code Playgroud)

样式.xml

<style name="TabTheme">
    <item name="android:textSize">40dp</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textAllCaps">true</item>
    <item name="android:textColor">@color/primaryDarkColor</item>
    <item name="android:includeFontPadding">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我还尝试将以下样式应用于 TabLayout 和 TabItem 但没有结果:

<style name="CustomTabText" parent="TextAppearance.Design.Tab">
    <item name="android:textSize">100sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android-layout android-tablayout

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