AppCompatのV21ツールバーの昇格前ロリポップ

? Tristan Vanderaerden @ | Original: StackOverFlow

まず第一に、私はこの質問は前に頼まれたことを知っているが、それは以前に回答されていません。私は誰かが私に答えを与えることができることを望む。

私のアプリケーションでは、私はAppcompat_v7 (API 21)からツールバーを使用しています。これは私のコードです:

<android.support.v7.widget.Toolbar
    style="@style/DarkActionbarStyle"
    android:id="@+id/toolBar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/actionbar_height" />

そして、これは私が使用してツールバーのスタイルは、次のとおりです。

<style name="DarkActionbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="android:background">?attr/colorPrimary</item>
    <item name="titleTextAppearance">@style/ActionBarTitle</item>
    <item name="android:elevation">2dp</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    <item name="theme">@style/ThemeActionBarDark</item>
</style>

<style name="ThemeActionBarDark" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="actionBarItemBackground">@drawable/btn_dark_orange</item>
    <item name="selectableItemBackground">@drawable/btn_dark_orange</item>
</style>

問題は、その標高は、事前にロリポップを動作しませんされている。だから私の質問は:それは前ロリポップデバイスのツールバーの下に影を持つことは可能ですか?



Top 5 Respuesta

1hitch.united @

私は、あなたができ、私はサポートライブラリを使用して「 ____ 」標高で問題を抱えていたと思います。それは私がこのような私のビューを設定する必要がありました動作させるために。

CardView

だから私は、あなたがXMLでこのようにそれを設定してみなければならないと思う -

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android.support.v7.cardview="http://schemas.android.com/apk/res-auto"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="125dp"
    android:orientation="horizontal"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="5dp"
    android.support.v7.cardview:cardElevation="10dp">
</android.support.v7.widget.CardView>

繰り返しますが、私はこれをテストしていない。しかし、私は「 ____ 」それを動作させるために使用していたに気づく。



2Alessandro Roaro @

あなたは、API 21 (アンドロイドロリポップ)の前に標高属性を使用することはできません。 ただし「 ____ 」の下に置かれたカスタムビューを使用して、たとえば、プログラム的に影を追加することができます。

For example:

android.support.v7.toolbar:elevation="10dp"

どこに影が黒いグラデーションで描画可能です。

3Zielony @

それは本当の影を持つことが可能だ - アニメ化し、生成。ロリポップで使用される方法は、フローズンヨーグルト以降で使用可能です。影の生成に使用されるハードウェアアクセラレーションは、私が推測するハニカム以降で利用可能です。それがどのように動作するかここに:

draw your view to an off-screen bitmap with LightingColorFilter set to 0,0 blur the black shape (the off-screen bitmap) using the ScriptIntrinsicBlur class and elevation value as radius draw the bitmap beneath the view

これは、カスタムの標高属性、レンダリング、影が可能なカスタムビューを追加し、スクリプトと(古いデバイス用)互換ライブラリをレンダリング使用する必要があります。私は、コンパイルとマイナーパフォーマンスの最適化の問題を含め、それらの多くがありますので、詳細に飛び込むつもりはありません。しかし、それは可能だ。

なぜ公式のサポートライブラリには影をありません?

it would require changes in the UI framework as it's impossible to freely draw outside view bounds smooth animation requires a quite good GPU

See:

https://www.youtube.com/watch?v=jbU4SXblO5s https://androidreclib.wordpress.com/2014/11/25/lollipops-shadows-on-gingerbread/ https://github.com/ZieIony/Carbon