0

問題は簡単です。私はCoordinatorLayoutの中にTabLayoutを持っており、実行時に各タブのCustomViewを動的に設定します。タブには、現在、タブの端でクリップされているアニメーションやカスタムコンテンツがあります。Android - TabLayoutの子がクリッピングするのを防ぐ

すべてのビュー階層でclipToPaddingとclipChildrenをすべてfalseに設定しましたが、成功しませんでした。タブはまだクリップされています。

TabLayout内でタブのカスタムビューをクリッピングすることを避けるにはどうすればいいですか?

あなたは私がやっているかを見ることができますので、ここでいくつかのコードです:、その後、タブは次のようになりますカスタム

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

<android.support.design.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:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clipToPadding="false" 
    android:clipChildren="false" 
    android:fitsSystemWindows="false" 
    tools:context=".MainTabbedActivity"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="@dimen/appbar_padding_top" 
    android:elevation="4dp" 
    android:clipToPadding="false" 
    android:clipChildren="false" 
    android:fitsSystemWindows="false" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:clipToPadding="false" 
     android:clipChildren="false" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/AppTheme.PopupOverlay"> 

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

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clipToPadding="false" 
     android:clipChildren="false" 
     app:tabPaddingBottom="-1dp" 
     app:tabPaddingEnd="-1dp" 
     app:tabPaddingStart="-1dp" 
     app:tabPaddingTop="-1dp" 
     app:tabIndicatorColor="@android:color/white"/> 

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

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

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    ... /> 

をそして:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="wrap_content" 
android:clipChildren="false" 
android:clipToPadding="false" 
android:layout_height="wrap_content"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="32dp" 
    android:scaleType="fitCenter" 
    android:layout_marginBottom="-4dp" 
    android:adjustViewBounds="true" 
    android:id="@+id/tab_pic" /> 

<TextView 
    android:id="@+id/tab_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/something" 
    android:textColor="@color/white" 
    android:textStyle="bold" 
    android:textSize="12sp" 
    android:visibility="invisible"/> 

結果は、位置/境界をアニメートするときにImageViewがクリップされます。

乾杯

答えて

2

これはすばらしかったです。私は解決策を見つけた。 AndroidはTabLayoutと実際のタブコンテンツの間に中間的な親ビューを作成するようです。

だから... ...各タブについては、以下を行うこと:

ViewGroup realTabs = ((ViewGroup) mTabLayout.getChildAt(0)); 
    realTabs.setClipToPadding(false); 
    realTabs.setClipChildren(false); 

    if (realTabs.getChildAt(0) instanceof ViewGroup) { // <-- This is the intermediate parent ViewGroup 
     ((ViewGroup)realTab0.getChildAt(0)).setClipToPadding(false); 
     ((ViewGroup)realTab0.getChildAt(0)).setClipChildren(false); 
    } 

...問題を解決します。

ありがとうございました

関連する問題