Xóa bóng bên dưới thanh hành động


208

Tôi sử dụng Actionbarsherlock. Đoạn mã dưới đây chịu trách nhiệm thay đổi nền của nó thành một mã tùy chỉnh.

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

Và nó hoạt động cho actionbarsherlock (trên các phiên bản bên dưới tổ ong). Nhưng trong ICS tôi có một cái bóng bên dưới thanh hành động mà tôi không muốn. Các mục phong cách để làm cho nó biến mất là gì?

Câu trả lời:


481

Các mục phong cách để làm cho nó biến mất là gì?

Để xóa bóng, hãy thêm phần này vào chủ đề ứng dụng của bạn:

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

CẬP NHẬT: Như @ Quinny898 đã nêu, trên Android 5.0, điều này đã thay đổi, bạn phải gọi setElevation(0)trên thanh hành động của mình. Lưu ý rằng nếu bạn đang sử dụng thư viện hỗ trợ, bạn phải gọi nó như vậy:

getSupportActionBar().setElevation(0);

Đây không phải là một phong cách để loại bỏ bóng từ bên dưới thanh trạng thái, không phải là thanh hành động?
Michał K

96
Cảm ơn, nó biến mất. Điều quan trọng cần lưu ý là dòng mã này sẽ xuất hiện trong chủ đề ứng dụng, không phải kiểu thanh hành động.
Michał K

3
Tôi làm việc! Điều cần làm rõ là dòng mã này phải được thêm vào Thẻ chủ đề ứng dụng, không phải thẻ Chủ đề ActionBar.
tuoxie007

Và một điều khác cũng cần lưu ý là bạn nên thay đổi chủ đề của mình theo các giá trị, giá trị-v11, value-v14 (nếu bạn sử dụng thanh công cụ, bỏ qua điều này)
TheOne_su

6
cho các thiết bị tiền kẹo getSupportActionBar().setElevation(0);không hoạt động. Vì vậy, bạn đã đưa <item name="android:windowContentOverlay">@null</item>vào chủ đề ứng dụng của bạn. Tôi đã có vấn đề tương tự. Bây giờ tôi đã có cả hai. setElevation từ và thêm mục windowContentOverlay trong chủ đề ứng dụng. setElevation hoạt động cho Android 5.0 trở lên trong khi các công cụ khác hoạt động trước kẹo mút. Chúc mừng!
Reaz Murshed

140

Đối với Android 5.0, nếu bạn muốn đặt trực tiếp thành kiểu sử dụng:

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

và để sử dụng tương thích thư viện Hỗ trợ:

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

Ví dụ về phong cách cho chủ đề ánh sáng 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>

Sau đó áp dụng kiểu ActionBar tùy chỉnh này cho chủ đề ứng dụng của bạn:

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

Đối với Android 5.0 trước, hãy thêm phần này vào chủ đề ứng dụng của bạn:

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

1
Không làm việc cho tôi cho các thiết bị trước 5.0. Vấn đề là, tôi đã thêm windowContentOverlaychủ đề vào thanh hành động chứ không phải chủ đề ứng dụng.
Oliv

Tôi xin lỗi nhưng tôi đang cố gắng làm điều ngược lại, Làm cho bóng độ cao thực sự xuất hiện trên các thiết bị tiền kẹo mút (Tôi đã quản lý để làm điều đó với android:elevationcác thiết bị Lollipop). Tôi không thể quản lý để làm điều đó, bằng cách sử dụng phương pháp này. Tôi tin rằng nó sẽ khá thẳng. Đặt một giá trị khác không cho các thuộc tính độ cao và đó sẽ là nó.
acrespo

Theo mặc định, nó sẽ hiển thị nếu bạn không chạm vào thuộc tính android: windowContentOverlay, có thể kiểm tra xem bạn có đang sử dụng đúng chủ đề không ... Tôi nghĩ bạn cần sử dụng chủ đề AppCompat.
Sloosh

Nhưng làm thế nào để đối phó với android:windowContentOverlayAPI kẹo mút trước? Tôi không thể biên dịch nếu minSDK của tôi là kẹo mút trước nhưng mục tiêu là 21?
Opiatefuchs

2
Điều này làm việc nhưng chỉ khi tôi sử dụng <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">mà không có style/trong parentthuộc tính.
Igor

103

Trên Android 5.0, điều này đã thay đổi, bạn phải gọi setElevation (0) trên thanh hành động của mình. Lưu ý rằng nếu bạn đang sử dụng thư viện hỗ trợ, bạn phải gọi nó như vậy:

getSupportActionBar().setElevation(0);

Nó không bị ảnh hưởng bởi mục kiểu windowContentOverlay, do đó không cần thay đổi kiểu nào


1
Bạn có phải làm điều này cho mọi hoạt động, hoặc có một phương pháp nhanh chóng để áp dụng cho tất cả các hoạt động không? Tôi sẽ thêm tất cả các hoạt động của tôi bây giờ. Cảm ơn!
cnfw

Giống như bất kỳ phương thức thanh hành động nào khác (ví dụ: tiêu đề), tôi muốn nói mọi hoạt động
Kieron

Thật là sự xấu hổ. Sẽ rất tốt nếu đặt các tham số như thế này trong tệp Styles.xml. Có lẽ điều đó sẽ đến trong một bản cập nhật trong tương lai
cnfw

Điều này không hoạt động trên các phiên bản thấp hơn 5.0. Không phải thanh hành động hỗ trợ được cho là tương thích với tất cả các thiết bị trước đó sao?
splinter123

tương tự như @ splinter123 tại đây :( Tự hỏi làm thế nào tôi có thể xóa bóng trên tiền Lollipop khi sử dụng AppCompat.
FD_

55

thêm app:elevation="0dp"vào AppBarLayout để ẩn bóng trong thanh ứng dụng


1
Nhìn mọi người, chỉ cần áp dụng giải pháp này và quên đi những gì người khác đã nói. Cảm ơn người đàn ông! nó hoạt động Giải pháp rất đơn giản!
S bruce

1
Sử dụng như sau: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" ứng dụng: cao = "0dp" android: theme = "@ style / AppTheme.AppBarOverlay">
Bharat Kul Ratan

@MarcoFerrari Sử dụng điều này trong trường hợp AppBarLayout là 'getSupportActionBar (). SetElevation (0);' không hoạt động.
Salil Dhawan

39

Nếu bạn đang làm việc với ActionBarSherlock

Trong chủ đề của bạn thêm điều này:

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

Đây là một câu trả lời tốt hơn, nó chỉ định mục tương thích
1owk3y

25

Bạn phải thiết lập app:elevation="0dp"trong android.support.design.widget.AppBarLayoutvà sau đó nó hoạt động.

<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
Điều này gây ra rằng cái bóng của AppBar ở khắp mọi nơi - làm cách nào tôi có thể kiểm soát chương trình đó?
Suisse

14
app:elevation="0dp" 

nhưng không

android:elevation="0dp"

làm việc cho tôi trên Android L


2

Tôi có cùng một vấn đề, và tôi đã giải quyết thành công vấn đề này. Tất cả bạn phải làm chỉ là thay đổi độ cao thành 0 giá trị dấu phẩy động trong hoạt động mà bạn muốn loại bỏ độ cao.

Nếu bạn muốn thay đổi nó trong một hoạt động được gọi là MyActivity.javado đó bạn phải có được hoạt động ActionBarđầu tiên.

Đầu tiên nhập ActionBarlớp

import android.support.v7.app.ActionBar;

sau khi nhập, bạn phải khởi tạo một biến của thanh hành động và đặt độ cao của nó thành 0.

 private ActionBar toolbar;

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

1

Đối với Nhà phát triển Xamarin, vui lòng sử dụng: SupportActionBar.Elevation = 0;cho AppCompatActivityhoặc ActionBar.Elevation = 0;cho các hoạt động không tương thích


1

Giải pháp cho Kotlin (Android 3.3, Kotlin 1.3.20)

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

Không chắc chắn lý do tại sao điều này bị hạ cấp (tôi mới ở Kotlin) nhưng điều này hiệu quả với tôi khi những người khác không làm được
Allen Wixted

1

Hãy thử điều này nó đã giúp tôi mà không thay đổi chủ đề. Đặt AppBarLayout của bạn bên trong bất kỳ bố cục nào. Hy vọng điều này sẽ giúp bạn

<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

Đối với những người làm việc trên các mảnh vỡ và nó biến mất sau khi cài đặt toolbar.getBackground().setAlpha(0);hoặc bất kỳ sự biến mất nào, tôi nghĩ rằng bạn phải mang AppBarLayout của mình đến cái cuối cùng trong xml, vì vậy Fragment của nó sau đó là AppBarLayout sau đó sử dụng lại / ràng buộc / tuyến tính bất cứ khi nào bạn sử dụng.


0

Thêm phần này toolbar.getBackground().setAlpha(0);vào bên trong phương thức OnCreate. Việc thêm này: android:elevation="0dp" android:background="@android:color/transparent vào tệp xml thanh công cụ của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.