【问题标题】:Extra white space on SlidingTabLayout bar in Android 7.0 N?Android 7.0 N 中 SlidingTabLayout 栏上的额外空白?
【发布时间】:2016-08-23 19:24:59
【问题描述】:

刚刚升级到 Android 7.0,我所有的 SlidingTabLayout 栏现在底部都有额外的空白。不确定这是否是 Android 团队的意图,但有没有办法摆脱新的空白?

我使用的是 Android 提供的代码,可以在这里找到:

滑动标签布局:https://developer.android.com/samples/BasicTransition/src/com.example.android.common/view/SlidingTabLayout.html

滑动标签条: https://developer.android.com/samples/BasicTransition/src/com.example.android.common/view/SlidingTabStrip.html

这是我的布局代码的 sn-p:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_height="56dp"
        android:layout_width="match_parent"
        android:background="@drawable/toolbar_gradient"
        app:layout_scrollFlags="scroll|enterAlways"
        android:theme="@style/Base.ThemeOverlay.AppCompat.Dark" />

    <com.airsenze.wineinsider.controllers.SlidingTabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"/>

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

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

谢谢!如果您需要更多信息,请告诉我。

【问题讨论】:

  • “不确定这是否是 Android 团队的意图”——这是您的代码,而不是 Android 团队的代码。您从一个 Android 示例开始,但不一定保证像这样的 Android 示例在 API 级别之间保持一致。它们是示例,不支持库类。实际上,您需要自己维护修改后的代码版本。
  • 是的,我明白了。不要试图责怪 Android 团队。我整个早上都在努力摆脱空白,但似乎没有任何效果。只是想知道是否有人有一个快速的解决方案来摆脱它。
  • 为什么不将您的工具栏高度设置为wrap_content
  • 没有任何理由。我把它改成 wrap_content 一切都一样。
  • 在 github 上创建了一个问题,所以也许有人会修复它:github.com/google/iosched/issues/218

标签: android android-tabs android-7.0-nougat


【解决方案1】:

distributeEvenly 为真时会发生这种情况。随便评论一下

lp.width = 0;

SlidingTabLayout.java 类中的populateTabStrip() 方法中,您的问题将得到解决。

【讨论】:

  • 这适用于牛轧糖设备!我想知道它是否会影响已经工作的以前的版本……非常感谢!
  • 是的。我在Android 4.0到最新版本(7.0)上测试过,没问题。
  • 虽然它修复了最初的问题,但此解决方案添加了另一个问题,选项卡不再均匀分布。我已将“lp.width=0”替换为“lp.width=ViewGroup.LayoutParams.MATCH_PARENT”。这似乎有效。
  • 真正对我有用的是这个答案stackoverflow.com/a/35824027/1315405
  • @Afshin 请帮助问题仍未解决。 stackoverflow.com/questions/51806016/…
【解决方案2】:

你的组件样式文件有声明吗

 --<item name="android:windowIsFloating">false</item>--

我刚刚发现BottomDialog的一个类似的错误,我删除了

--<item name="android:windowIsFloating">false</item>--

我的组件样式文件中的这一行,否则组件将在实际底部上方显示 30dp。 我认为你应该检查这个文件:

android:theme="@style/AppTheme.AppBarOverlay"

逐一删除,找出是哪个项目导致了这个bug。

【讨论】:

    【解决方案3】:

    我不认为它对你有用,但仍然在你的布局中尝试这个。设置自定义高度 (48dp) 并设置牛轧糖的条件。不幸的是,它对我有用:)。

      <com.airsenze.wineinsider.controllers.SlidingTabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@color/white"/>
    

    【讨论】:

      【解决方案4】:

      您应该将选项卡的 TextView 的最大行数设置为 1。

      有两种方式:

      1.更改 SlidingTabLayout:

      protected TextView createDefaultTabView(Context context) {
          TextView textView = new TextView(context);
          textView.setMaxLines(1);
          ...
      }
      

      2。使用自定义标签布局

      例如:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="?selectableItemBackground"
                    android:gravity="center_horizontal"
                    android:orientation="vertical"
                    android:paddingBottom="8dp"
                    android:paddingTop="8dp">
      
          <TextView
              android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textAllCaps="true"
              android:textColor="@color/text_tab"
              android:maxLines="1" <=============attention==============
              android:textSize="12dp"
              android:textStyle="bold"/>
      
      </LinearLayout>
      

      【讨论】:

        【解决方案5】:

        Afshin 给出了很好的答案。我遇到了一些 API 低于 25 的问题。这可能是迟到的答案,但它可以帮助某人。

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                            lp.weight = 1;
                        }else{
                            lp.width = 0;
                            lp.weight = 1;
                        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多