2014-12-11 5 views
3

나는 동작 표시 줄과 탭 표시 줄이 있습니다.TabBar 아래에 그림자 추가 - 재질 디자인

<item name="android:windowContentOverlay">@null</item> 

으로 작업 표시 줄 아래의 그림자를 제거했지만 탭 바 아래에 그림자를 추가하고 싶습니다. SlidingTabLayout을 사용하고 있습니다. 내 탭 TextView :

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tabText" 
android:layout_width="wrap_content" 
android:layout_height="@dimen/actionbar_height" 
android:textColor="@color/tab_color" 
android:gravity="center" 
android:textAllCaps="true" 
android:singleLine="true" /> 

어떻게 할 수 있습니까?

답변

0

Android 재질 디자인을 사용하는 경우보기에 그림자를 추가하려면 레이아웃에 android:elevation 특성을 지정하거나 코드에서 myView.setElevation() 메서드를 호출해야합니다. 안드로이드에서 머티리얼 디자인을 사용하여 그림자를 정의 할 때 더 많은 것을 가질 수 있습니다. documentation

+1

내 minSdk는 18입니다.이 속성을 지원 라이브러리와 함께 사용하는 방법이 있습니까? – rniski

+1

해발 고도는 정답이지만 더 큰 sdk21을 지원합니다. – HPbyP

3

그림자는 현재 실시간으로 렌더링되므로 Api 레벨 21에서만 지원되며 불행히도 지원 라이브러리에서 제공되지 않습니다.

따라서이 작업을 수행하기 위해 API 수준 < (21) 에 사용자 정의 그릴 수있는 가장 쉬운 방법을 사용하여 그림자를 직접 모방해야 할 것입니다 :

  • 는 구글 IO 응용 프로그램에서 shadow 9-patch을.
  • 설정하는 것이 예를 들어 메인 컨텐츠 레이아웃에 그림자 :

    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
    
        <Toolbar 
         android:id="@+id/tb_toolbar" 
         android:layout_width="match_parent" 
         android:layout_height="@dimen/abc_action_bar_default_height_material" 
         android:title="@string/toolbar_title" 
         android:elevation="@dimen/toolbar_elevation"/> 
    
        <FrameLayout 
         android:id="@+id/fl_fragment_container" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:layout_below="@id/tb_toolbar" 
         android:foreground="@drawable/bottom_shadow"/> 
    </RelativeLayout> 
    

참고 :이 유일한 주목할만한 예외이 하나의 오래된 API 수준에 자신의 그림자를 않습니다, CardView입니다.

자세한 내용은 this post을 참조하십시오.

+0

framelayout에 일부 하위 뷰가 포함 된 경우 그림자 드로잉 블을 ** 전경 **으로 사용하는 것이 좋습니다. 그런 식으로 항상 그려 질 것입니다. – Natix

+0

그것은 많은 의미를가집니다, 나는 그것을 바꿀 것입니다! :) –

+0

그림자 아래에서 내용을 스크롤 할 수는 없지만 작동합니다. 가장자리에서 그렇게 투명하지 않습니다. – Skynet

21

jmols는 Google 앱 (예 : Play 뉴스 스탠드)이 사용하는 것과 다른 그림자로 결과에 응답합니다. ,

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient 
     android:startColor="@android:color/transparent" 
     android:endColor="#33000000" 
     android:angle="90"> 
    </gradient> 
</shape> 

그런 다음, 콘텐츠 레이아웃에 그 그림자를 설정합니다

가 당김이 shadow.xml라는 만들기 : 이것은 Play 뉴스 스탠드와 똑같은 찾고 그림자 결과 내 방법입니다 예 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <!-- Your views here --> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="8dp" 
     android:background="@drawable/shadow" /> 
</RelativeLayout> 

구현 도구와 동일하게 표시됩니다. Play 뉴스 스탠드 및 Play 스토어에서

+1

setElevation, setZ 또는 setTranslationZ는 실제 그림자가 없으면 탭이 더 어두워지는 반면, 이것은 저에게 큰 도움이되었습니다. – 3c71

+1

이것은 가장 간단하고 유용한 솔루션입니다. 훌륭한 – rrdev