작업 표시 줄 아래의 그림자 제거


208

나는 actionbarsherlock을 사용합니다. 아래 코드는 배경을 사용자 정의 배경으로 변경하는 역할을합니다.

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="background">@drawable/actionbar_bg</item>
    <item name="android:background">@drawable/actionbar_bg</item>
    <...>  
</style>

<style name="Theme.MyApp" parent="@style/Theme.Sherlock.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <..>
</style>

그리고 actionbarsherlock (허니컴 아래 버전)에서 작동합니다. 그러나 ICS에서는 원하지 않는 작업 표시 줄 아래에 그림자가 있습니다. 사라지게하는 스타일 아이템은 무엇입니까?

답변:


481

사라지게하는 스타일 아이템은 무엇입니까?

그림자를 제거하려면 앱 테마에 다음을 추가하십시오.

<style name="MyAppTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowContentOverlay">@null</item>
</style>

업데이트 : @ Quinny898에서 언급했듯이 Android 5.0에서 변경된 사항이므로 setElevation(0)작업 표시 줄 을 호출 해야합니다. 지원 라이브러리를 사용하는 경우 다음과 같이 지원 라이브러리를 호출해야합니다.

getSupportActionBar().setElevation(0);

작업 표시 줄이 아닌 상태 표시 줄 아래에서 그림자를 제거하는 스타일이 아닙니까?
Michał K

96
고마워 사라졌어 주의해야 할 점은이 코드 행이 작업 표시 줄 스타일이 아니라 앱 테마에 나타나야한다는 것입니다.
Michał K

3
일 해요! 분명한 것은 ActionBar 테마 태그가 아니라 앱 테마 태그에이 코드 줄을 추가해야한다는 것입니다.
tuoxie007

또한 주목해야 할 또 다른 사항은 값, values-v11, value-v14에서 테마를 변경해야한다는 것입니다 (툴바를 사용하는 경우 무시)
TheOne_su

6
롤리팝 이전 기기 getSupportActionBar().setElevation(0);에서는 작동하지 않습니다. 그래서 당신은 <item name="android:windowContentOverlay">@null</item>당신의 응용 프로그램 테마를 넣었 습니다. 나는 비슷한 문제가 있었다. 이제 둘 다 있습니다. 응용 프로그램 테마에 setElevation from 및 windowContentOverlay 항목을 추가했습니다. setElevation은 안드로이드 5.0 이상에서 작동하고 다른 것은 롤리팝 이전에서 작동합니다. 건배!
Reaz Murshed

140

Android 5.0의 경우 스타일 사용으로 직접 설정하려면 다음을 수행하십시오.

<item name="android:elevation">0dp</item>

지원 라이브러리 호환성을 위해 :

<item name="elevation">0dp</item>

AppCompat 라이트 테마의 스타일 예 :

<style name="Theme.MyApp.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <!-- remove shadow below action bar -->
    <!-- <item name="android:elevation">0dp</item> -->
    <!-- Support library compatibility -->
    <item name="elevation">0dp</item>
</style>

그런 다음이 사용자 정의 ActionBar 스타일을 앱 테마에 적용하십시오.

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>

5.0 이전 Android의 경우이를 앱 테마에도 추가하십시오.

<!-- Remove shadow below action bar Android < 5.0 -->
<item name="android:windowContentOverlay">@null</item>

1
5.0 이전 기기에서는 작동하지 않았습니다. 문제는 windowContentOverlay앱 테마가 아닌 작업 표시 줄 테마에 추가했습니다 .
Oliv

죄송하지만 그 반대의 일을하려고합니다. 롤리팝 이전 기기에 실제로 높이 그림자를 표시합니다 (롤리팝 기기와 함께 사용 android:elevation했습니다). 이 접근법을 사용하여 관리 할 수 ​​없습니다. 나는 그것이 똑바로 될 것이라고 믿습니다. 표고 속성에 0이 아닌 값을 입력하면 그 값이됩니다.
acrespo

android : windowContentOverlay 속성을 터치하지 않으면 기본적으로 표시되어야합니다. 올바른 테마를 사용하고 있는지 확인하십시오 ... AppCompat 테마를 사용해야한다고 생각합니다.
Sloosh

android:windowContentOverlay사전 롤리팝 API 를 다루는 방법 ? minSDK가 사전 롤리팝이지만 대상이 21 인 경우 컴파일 할 수 없습니까?
Opiatefuchs

2
이것은 in 속성 <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">없이 사용했을 때만 작동했습니다 . style/parent
Igor

103

Android 5.0에서는 이것이 변경되었으므로 작업 표시 줄에서 setElevation (0)을 호출해야합니다. 지원 라이브러리를 사용하는 경우 다음과 같이 지원 라이브러리를 호출해야합니다.

getSupportActionBar().setElevation(0);

windowContentOverlay 스타일 항목의 영향을받지 않으므로 스타일을 변경할 필요가 없습니다.


1
모든 활동에 대해이 작업을 수행해야합니까, 아니면 모든 활동에 적용 할 수있는 빠른 방법이 있습니까? 지금은이 모든 활동을 추가하겠습니다. 감사!
cnfw 2013

다른 작업 표시 줄 방법 ​​(예 : 제목)과 마찬가지로 모든 활동을 말하고 싶습니다
Kieron

부끄러운 일입니다. styles.xml 파일에서 이와 같은 매개 변수를 설정하는 것이 좋습니다. 어쩌면 향후 업데이트에 올 것이다
cnfw

5.0보다 낮은 버전에서는 작동하지 않습니다. 지원 작업 표시 줄이 이전의 모든 장치와 호환되지 않습니까?
splinter123

@ splinter123과 동일 : (AppCompat를 사용할 때 롤리팝 이전의 그림자를 어떻게 제거 할 수 있는지 궁금합니다.
FD_

55

app:elevation="0dp"앱 바에 그림자를 숨기려면 AppBarLayout에 추가


1
모든 사람을보고이 솔루션을 적용하고 다른 사람의 말을 잊어 버리십시오. 고마워요! 효과가있다! 매우 간단한 해결책!
S bruce

1
다음과 같이 사용하십시오. <android.support.design.widget.AppBarLayout android : layout_width = "match_parent"android : layout_height = "wrap_content"app : elevation = "0dp"android : theme = "@ style / AppTheme.AppBarOverlay">
Bharat 쿨 라탄

@MarcoFerrari AppBarLayout의 경우이를 'getSupportActionBar (). setElevation (0);'으로 사용하십시오. 작동하지 않습니다.
Salil Dhawan

39

ActionBarSherlock으로 작업중인 경우

당신의 테마에 이것을 추가하십시오 :

<style name="MyTheme" parent="Theme.Sherlock">
    ....
    <item name="windowContentOverlay">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    ....
</style>

이것은 더 나은 대답이며, 호환성 항목을 지정합니다
1owk3y

25

당신은 설정해야합니다 app:elevation="0dp"android.support.design.widget.AppBarLayout후 작동합니다.

<android.support.design.widget.AppBarLayout
    app:elevation="0dp"... >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent"
        app:popupTheme="@style/AppTheme.PopupOverlay" >


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

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

1
이로 인해 AppBar의 그림자가 어디에나 없어집니다. 프로그래밍 방식으로 어떻게 제어 할 수 있습니까?
스위스

14
app:elevation="0dp" 

하지만

android:elevation="0dp"

안드로이드 L에서 나를 위해 일했습니다.


2

나는이 같은 문제가 있으며이 문제를 성공적으로 해결했습니다. 표고를 제거하려는 활동에서 표고를 0 부동 소수점 값으로 변경하기 만하면됩니다.

라는 활동에서 변경 MyActivity.java하려면 ActionBar먼저 가져와야합니다 .

먼저 ActionBar수업을 가져 오십시오

import android.support.v7.app.ActionBar;

가져온 후에는 작업 표시 줄의 변수를 초기화하고 높이를 0으로 설정해야합니다.

 private ActionBar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    .
    .
    toolbar=getSupportActionBar();
    toolbar.setElevation(0);
    .
    .
    }

1

자 마린 개발자를 들어, 사용하십시오 : SupportActionBar.Elevation = 0;대한 AppCompatActivity또는 ActionBar.Elevation = 0;비의 compat 활동에 대한


1

코 틀린 솔루션 (Android 3.3, Kotlin 1.3.20)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.elevation = 0f
}


1

이것을 시도해보십시오. 테마를 변경하지 않고 나에게 도움이되었습니다. 레이아웃 안에 AppBarLayout을 넣으십시오.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="false"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:layout_height="?attr/actionBarSize"
       android:background="@color/white">
        <ImageView
            android:src="@drawable/go_grocery_logo"
            android:layout_width="108dp"
            android:layout_height="32dp" />
    </android.support.v7.widget.Toolbar>


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

0

조각에 대한 작업을하고 설정 toolbar.getBackground().setAlpha(0);또는 사라진 후 사라진 사람들 의 경우 AppBarLayout을 XML에서 마지막으로 가져와야하므로 조각 다음 AppBarLayout을 사용한 다음 relativelayout / constraint / linear를 사용하십시오.


0

이것을 toolbar.getBackground().setAlpha(0);OnCreate 메소드 안에 추가하십시오 . 이것을 android:elevation="0dp" android:background="@android:color/transparent 툴바 xml 파일에 추가 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.