2014-10-29 67 views
14

Như bạn biết, Độ cao không hoạt động trên các thiết bị Pre-Lollipop. Bởi vì điều này, thanh ứng dụng mặc định trong appcompat-v7 sử dụng kết cấu "giả bóng", như tôi muốn gọi nó, để mô phỏng bóng. Vấn đề của tôi là tôi cần sử dụng Thanh công cụ tùy chỉnh. Khi tôi sử dụng thanh công cụ tùy chỉnh, "pseudo-shadow" không xuất hiện. Vì vậy, nó trông phẳng. Bất kỳ ý tưởng làm thế nào để thêm bóng đó trở lại? Một số người đã nói trên các diễn đàn khác để thêm một FrameLayout với một tiền cảnh của "android: windowContentOverlay" bằng cách nào đó chồng lên ToolBar. Tôi không tìm được cách nào để làm việc đó, thật đáng buồn. Và vì lý do nào đó, trong thử nghiệm của tôi, "android: windowContentOverlay" vẫn ẩn. Không chắc mình đang làm gì sai. :/Bóng không hoạt động khi sử dụng Thanh công cụ (Lollipop appcompat-v7)

Dưới đây là các dữ liệu Giao diện XML cho Toolbar của tôi:

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_awesome_toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Đây là những gì nó trông giống như với mặc định AppCompat AppBar: http://imgur.com/0EiE1Vv

Đây là những gì nó trông giống như với một ToolBar tùy chỉnh: http://imgur.com/GGEC6Tq

Chỉnh sửa: Với trợ giúp từ alanv, tôi đã tìm ra cách tạo bóng bên dưới Thanh công cụ. Tuy nhiên, nó không giống với mặc định trong AppCompat. Nó chỉ là một cái bóng mờ nhạt, và nếu tôi nhớ chính xác đó là cùng một tài nguyên bóng đã được sử dụng trong các phiên bản cũ. Tôi đang gặp khó khăn khi cố tìm tài nguyên cho thanh AppCompat mặc định.

+1

Các foreground nên được thiết lập sử dụng android: foreground = "android:? Attr/windowContentOverlay".FrameLayout phải ở bên dưới Thanh công cụ của bạn và phải chứa nội dung ứng dụng của bạn. – alanv

+1

Cảm ơn lời khuyên. Nó thực sự * đã * tạo ra một cái bóng, mặc dù nó khá mờ nhạt. Không hoàn toàn là những gì tôi đang tìm kiếm, thật đáng buồn. Có thể có một tài nguyên khác hơn windowContentOverlay thực hiện điều này? Tôi dường như không thể tìm thấy bất cứ điều gì. – Michael

+0

@Phascinate bạn có tìm thấy tài nguyên phù hợp cho cả hai lớp phủ, thanh công cụ và nội dung bên dưới không? Có vẻ như đây là hai lớp phủ khác nhau và tôi đang tìm kiếm các tài nguyên để đạt được kết quả tương tự như thanh công cụ cổ phiếu. – tomrozb

Trả lời

0

tôi sẽ chỉ có một bóng tùy chỉnh XML, với ImageView

<ImageView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/shadow" 
android:layout_height="@dimen/shadow_height" 
android:layout_width="match_parent" 
android:src="@drawable/shadow_shape" 
    /> 

và shadow_shape.xml tài nguyên hình ảnh của mình trong thư mục drawable của bạn:

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

Bạn có thể nhận được kết quả khá thoải mái bởi điều chỉnh @dimen/shadow_height@color/shadow theo nhu cầu của bạn (tối hơn @color/shadow & chế độ xem cao hơn, độ cao giả của bạn càng cao). Nó không phải là bản địa, nhưng rất tùy biến.

1

Bạn sẽ đặt nó dưới thanh công cụ.

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="5dp" 
     android:background="@drawable/toolbar_shadow" /> 
</FrameLayout> 

@ drawable/toolbar_shadow:

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

tôi sẽ khuyên bạn nên sử dụng hai bố trí khác nhau (một cho phiên bản 21 và một cho tất cả những người khác) và chứa chúng trong cách bố trí của bạn sử dụng:

<include layout="@layout/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Ví dụ: https://gist.github.com/P0T4T0x/fbd2151bb40d3bd635d0

1

Để hiển thị bóng dưới công cụ của bạn ar vui lòng sử dụng AppBarLayout có sẵn trong Thư viện hỗ trợ thiết kế của Google Android. Đây là một ví dụ về cách nó nên được sử dụng.

<android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
    <android.support.v7.widget.Toolbar 
      android:layout_height="?attr/actionBarSize" 
      android:layout_width="match_parent"/> 
    </android.support.design.widget.AppBarLayout> 

Để sử dụng thiết kế Thư viện hỗ trợ Google Android nhập sau vào tập tin build.gradle của bạn:

compile 'com.android.support:design:22.2.0' 
Các vấn đề liên quan