如何从android.support.v7.widget.Toolbar中删除顶部和底部填充?

前端之家收集整理的这篇文章主要介绍了如何从android.support.v7.widget.Toolbar中删除顶部和底部填充?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在我的 android.support.v7.widget.Toolbar中放置一个 SlidingTabLayout但由于某种原因在纵向布局中有额外的顶部和底部填充.如截图所示:

在横向布局中,android.support.v7.widget.Toolbar更短,额外的填充消失了:

我知道contentInsertStart和contentInsetEnd属性,但顶部和底部似乎没有任何内容.这是我的布局:

<android.support.design.widget.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:theme="?attr/actionBarTheme"
    >

    <!-- Changing the size of the toolbar fixed the problem below but I don't like the solution since the height difference is perceptible -->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="?attr/colorPrimary"
        android:padding="0dp"
        app:popupTheme="?attr/actionBarPopupTheme"
        >

        <!-- TODO: BUG - This isn't filling out the action bar in portrait (see note above) -->
        <com.myapplication.views.widgets.SlidingTabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@color/pink_400"
            />

    </android.support.v7.widget.Toolbar>

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

评论中所示,如果我手动将android.support.v7.widget.Toolbar的高度设置为48dp,那么SlidingTabLayout会将其填满,但这里有两个问题:

>工具栏的高度与标准工具栏的高度不同,在更改活动时会很明显.
>如果我改变它的高度,工具栏中的图标不再垂直居中

因此,如标题所示,如何从android.support.v7.widget.Toolbar中删除顶部和底部填充?

解决方法

好吧@RaviSravanKumar的评论帮助我解决了这个问题.当我将布局更改回:
<android.support.design.widget.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:theme="?attr/actionBarTheme"
    >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="?attr/actionBarPopupTheme"
        >

        <com.myapplication.views.widgets.SlidingTabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="wrap_content"
            android:layout_height="?attr/actionBarSize"
            />

    </android.support.v7.widget.Toolbar>

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

将高度设置为?attr / actionBarSize后,我注意到SlidingTabLayout实际上填满了整个高度.因为我为调试设置的粉红色背景,我才注意到这一点.

我错过这个原因的原因是因为下划线指标仍然不在底部(如原始问题中的屏幕截图所示).我不得不对SlidingTabLayout代码进行以下更改:

原版的:

public SlidingTabLayout(Context context,AttributeSet attrs,int defStyle) {
    super(context,attrs,defStyle);

    // Disable the Scroll Bar
    setHorizontalScrollBarEnabled(false);
    // Make sure that the Tab Strips fills this View
    setFillViewport(true);

    mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density);

    mTabStrip = new SlidingTabStrip(context);
    addView(mTabStrip,LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
}

新增:(请注意从LayoutParams.WRAP_CONTENT到LayoutParams.MATCH_PARENT的更改:

public SlidingTabLayout(Context context,LayoutParams.MATCH_PARENT);
}

原版的:

protected TextView createDefaultTabView(Context context) {
    TextView textView = new TextView(context);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,TAB_VIEW_TEXT_SIZE_SP);
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));

    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,outValue,true);
    textView.setBackgroundResource(outValue.resourceId);

    if (Build.VERSION.SDK_INT >= 14) {
        textView.setAllCaps(true);
    }

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
    textView.setPadding(padding,padding,padding);

    return textView;
}

新:(注意布局参数和填充的更改)

protected TextView createDefaultTabView(Context context) {
    TextView textView = new TextView(context);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,ViewGroup.LayoutParams.MATCH_PARENT));

    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,0);

    return textView;
}

猜你在找的Android相关文章