ลบเงาใต้ actionbar


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 ฉันมีเงาใต้ actionbar ซึ่งฉันไม่ต้องการ ไอเท็มสไตล์ที่ทำให้มันหายไปคืออะไร?

คำตอบ:


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);

มีสไตล์ในการลบเงาออกจากด้านล่างของแถบสถานะไม่ใช่ actionbar หรือไม่
Michał K

96
ขอบคุณมันหายไป สิ่งสำคัญที่ควรทราบคือรหัสบรรทัดนี้ควรปรากฏในชุดรูปแบบแอพไม่ใช่สไตล์แอ็คชั่นบาร์
Michał K

3
ฉันทำงาน! สิ่งที่ต้องมีความชัดเจนคือควรเพิ่มรหัสของบรรทัดนี้ในแท็กชุดรูปแบบแอปไม่ใช่แท็กชุดรูปแบบ ActionBar
tuoxie007

และอีกสิ่งที่ควรสังเกตคือคุณควรเปลี่ยนชุดรูปแบบของคุณในค่า, ค่า -v11, ค่า -v14 (ถ้าคุณใช้แถบเครื่องมือ, ไม่สนใจสิ่งนี้)
TheOne_su

6
สำหรับอุปกรณ์ pre-lollipop getSupportActionBar().setElevation(0);ไม่ทำงาน ดังนั้นคุณจึงใส่<item name="android:windowContentOverlay">@null</item>ธีมแอปพลิเคชันของคุณ ฉันมีปัญหาที่คล้ายกัน ตอนนี้ฉันทั้งคู่ setElevation จากและเพิ่มรายการ windowContentOverlay ในธีมแอปพลิเคชัน setElevation ใช้งานได้กับ android 5.0 ขึ้นไปในขณะที่ส่วนอื่นทำงาน pre-lollipop ไชโย!
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>

สำหรับ Android 5.0 ก่อนเพิ่มสิ่งนี้ในธีมแอพของคุณด้วย:

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

1
ไม่ทำงานสำหรับฉันสำหรับอุปกรณ์ 5.0 ก่อน ปัญหาคือฉันเพิ่มwindowContentOverlayธีมในแถบแอ็คชันไม่ใช่ไปยังธีมแอพ
Oliv

ฉันขอโทษ แต่ฉันพยายามที่จะทำในสิ่งที่ตรงกันข้ามทำให้เงาระดับความสูงปรากฏบนอุปกรณ์ pre-lollipop (ฉันจัดการเพื่อใช้กับandroid:elevationอุปกรณ์ Lollipop ได้) ฉันไม่สามารถทำได้โดยใช้วิธีนี้ ฉันเชื่อว่ามันจะค่อนข้างตรง ใส่ค่าที่ไม่เป็นศูนย์สำหรับแอตทริบิวต์การยกระดับและนั่นจะเป็น
acrespo

โดยค่าเริ่มต้นควรจะปรากฏให้เห็นหากคุณไม่แตะ android: windowContentOverlay คุณลักษณะอาจตรวจสอบว่าคุณใช้ชุดรูปแบบที่ถูกต้อง ... ฉันคิดว่าคุณต้องใช้ชุดรูปแบบ AppCompat
สโลแกน

แต่จะจัดการกับandroid:windowContentOverlaylollipop API ได้อย่างไร? ฉันไม่สามารถรวบรวมถ้า minSDK ของฉันเป็น lollipop ก่อน แต่เป้าหมายคือ 21?
Opiatefuchs

2
นี้ทำงาน แต่เมื่อผมใช้<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

เช่นเดียวกับวิธีการ actionbar อื่น ๆ (เช่นชื่อ) ฉันจะพูดทุกกิจกรรม
Kieron

นั่นเป็นความอัปยศ มันจะเป็นการดีที่จะตั้งค่าพารามิเตอร์เช่นนี้ในไฟล์ styles.xml อาจจะมีการอัพเดตในอนาคต
cnfw

สิ่งนี้ไม่ทำงานในเวอร์ชันต่ำกว่า 5.0 Actionbar สนับสนุนไม่ควรเข้ากันได้กับอุปกรณ์ก่อนหน้าทั้งหมดหรือไม่
splinter123

เช่นเดียวกับ @ splinter123 ที่นี่ :( สงสัยว่าฉันจะลบเงาบน pre-Lollipop ได้อย่างไรเมื่อใช้ AppCompat
FD_

55

เพิ่มapp:elevation="0dp"ใน AppBarLayout เพื่อซ่อนเงาในแถบแอป


1
ดูทุกคนเพียงใช้โซลูชันนี้และลืมสิ่งที่คนอื่นพูด ขอบคุณผู้ชาย! มันได้ผล! ทางออกที่ง่ายมาก!
S bruce

1
การใช้งานเช่นนี้: <android.support.design.widget.AppBarLayout หุ่นยนต์: layout_width = "match_parent" หุ่นยนต์: layout_height = "wrap_content" app: ระดับความสูง = "0dp" หุ่นยนต์: ชุดรูปแบบ = "@ สไตล์ / AppTheme.AppBarOverlay">
สาธารณรัฐอินเดีย กุลรัตตัน

@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 หายไปทุกหนทุกแห่ง - ฉันจะควบคุมโปรแกรมนั้นได้อย่างไร?
Suisse


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

สำหรับนักพัฒนา Xamarin โปรดใช้: SupportActionBar.Elevation = 0;สำหรับAppCompatActivityหรือActionBar.Elevation = 0;สำหรับกิจกรรมที่ไม่เข้ากัน


1

โซลูชันสำหรับKotlin (Android 3.3, Kotlin 1.3.20)

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

ไม่แน่ใจว่าทำไม downvote นี้ (ฉันใหม่ที่ Kotlin) แต่สิ่งนี้ใช้ได้ผลกับฉันในที่ที่คนอื่นไม่ได้
อัลเลนวิ

1

ลองสิ่งนี้มันช่วยฉันโดยไม่เปลี่ยนธีม วางแอพของคุณไว้ในเค้าโครงใดก็ได้หวังว่านี่จะช่วยคุณได้

<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 ดังนั้น Fragment แล้ว AppBarLayout จะใช้ relativelayout / ข้อ จำกัด / เชิงเส้นใดก็ได้


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.