繁体   English   中英

Android 选项卡布局不占用自定义视图的全宽

[英]Android Tab Layout not taking up full width with custom view

Android TabLayout tabPaddingTop 和 tabPaddingBottom 未被删除

也请参考上面的问题。

即使我将我的设计库更新为“23.2.0”,标签布局也一团糟。

下图是我的选项卡布局。

Xml 部分:-

<android.support.design.widget.TabLayout
    android:id="@+id/sliding_tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabIndicatorColor="@android:color/white"
    app:tabIndicatorHeight="@dimen/dp2"
    app:tabMode="fixed"
    app:tabSelectedTextColor="@android:color/white"
    app:tabTextAppearance="@style/MyCustomTabTextAppearance" />

样式 xml :-

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/color_156084</item>
</style>

<style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="android:textSize">@dimen/sp14</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="textAllCaps">false</item>
</style>

我已将填充设置为 -1dp,甚至还使用 tabGravity 进行填充,但没有任何效果。

这段代码曾经在早期版本中工作,但现在如果我降级它,我会在 TintManager 上收到 no class def found 错误。

在此处输入图片说明

设置不同的值或布局参数不起作用,所以我得到的唯一解决方案是在将选项卡添加到选项卡布局后添加以下内容,

final ViewGroup test = (ViewGroup)(tabs.getChildAt(0));//tabs is your Tablayout
int tabLen = test.getChildCount();

for (int i = 0; i < tabLen; i++) {
            View v = test.getChildAt(i);
            v.setPadding(0, 0, 0, 0);
        }

尝试将以下属性添加到 TabLayout:

app:tabPaddingStart="-1dp"
app:tabPaddingEnd="-1dp"

希望它会起作用。

您可以直接访问TabLayout.Tab视图并将填充设置为0 ,就像下面的代码一样,而不是处理TabLayout子视图。

for (int i = 0; i < tabLayout.getTabCount(); i++) {
    View tabView = tabLayout.getTabAt(i).view;
    tabView.setPadding(0, 0, 0, 0);
}

我正在onCreateView回调中执行此操作,并且效果很好。

我被困了几个小时,直到找到方法tab.setCustomView(idRes) 从充气变成这个对我有用。 或者,如果您要充气,您可以使用TabLayout.TabView作为根视图组。

除此之外,我不确定它是否有帮助,但我将minWidth用于自定义视图布局。

这就是我想要的

尝试在 LinearLayout 中添加 TabLayout ,例如:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:id="@+id/sliding_tabs"
        style="@style/MyCustomTabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFF" />
</LinearLayout>

在 Styles.xml 添加:

 <style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
    <item name="tabTextAppearance">@style/MyCustomTextAppearance</item>
</style>

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="textAllCaps">false</item>
</style>

只需将您的 tabLayout 传递给此方法即可完成!

private void setTabLayoutMatchParent(TabLayout tabLayout) {
    final ViewGroup tabLayoutChild = (ViewGroup)(tabLayout.getChildAt(0));
    int tabLen = tabLayoutChild.getChildCount();

    for (int j = 0; j < tabLen; j++) {
        View v = tabLayoutChild.getChildAt(j);
        v.setPadding(0, 0, 0, 0);
    }
}

在我的情况下,问题是为我用于选项卡的自定义布局提供固定高度 使用match_parent解决了我的问题。

TabLayout 中有属性: app:tabPaddingStartapp:tabPaddingEnd

您可以将 -1 设置为它们两个,以便在 TabLayout 的自定义视图中删除填充开始和结束。

<com.google.android.material.tabs.TabLayout
        android:id="@+id/tlEmojis"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:tabPaddingStart="-1dp"
        app:tabPaddingEnd="-1dp"
        app:tabMaxWidth="@dimen/dimen_48dp"
        app:tabMode="scrollable" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM