0

문제는 간단합니다. 나는 코디네이터 레이아웃 내에서 TabLayout을 가지며 런타임시 각 탭에 대해 CustomView를 동적으로 설정합니다. 탭에는 현재 탭의 가장자리에서 잘리는 일부 애니메이션 및 사용자 정의 컨텐츠가 있습니다.안드로이드 - 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

좋습니다. 해결책을 찾았습니다. 안드로이드는 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); 
    } 

는 ... 문제를 해결합니다.

감사합니다.