[解決済み】Androidの "昇降 "に影が表示されない件
2022-03-27 10:40:40
質問
ListViewを持っていて、各リスト項目の下に影を表示させたいと思っています。Android Lollipopの新しい標高機能を使って、影を落としたいViewにZを設定しています。すでにActionBar(Lollipopでは技術的にはToolbar)で効果的に行っています。ロリポップの仰角を使っているのですが、なぜかリストアイテムの下に影が表示されないのです。各リストアイテムのレイアウトはこんな感じです。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
style="@style/block"
android:gravity="center"
android:layout_gravity="center"
android:background="@color/lightgray"
>
<RelativeLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:elevation="30dp"
>
<ImageView
android:id="@+id/documentImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/alphared"
android:layout_alignParentBottom="true" >
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="light"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingBottom="4dp"
android:singleLine="true"
android:text="New Document"
android:textSize="27sp"/>
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentPageCount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="italic"
android:paddingLeft="16dp"
android:layout_marginBottom="16dp"
android:text="1 page"
android:textSize="20sp"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
しかし、以下はリスト項目を影なしで表示する方法です。
また、以下のようなことも試してみましたが、効果がありません。
- 親レイアウトではなく、ImageViewやTextViews自体に標高を設定する。
- ImageViewに背景を適用しました。
- Elevationの代わりにTranslationZを使用。
解決方法は?
ロリポップでシャドウを少し弄ってみたところ、こんな感じになりました。
-
どうやら親の
ViewGroup
の境界は、何らかの理由でその子の影をカットします。 -
で設定したシャドウを
android:elevation
はカットオフされます。View
の境界ではなく、マージンを通して拡張された境界です。 -
子ビューにシャドウを表示させる正しい方法は、親ビューにパディングを設定し
android:clipToPadding="false"
をその親の上に置く。
以下は、私が知っていることを基にした提案です。
-
トップレベルを設定する
RelativeLayout
で、シャドウを表示させたい相対レイアウトに設定したマージンと同じパディングを持つようにします。 -
セット
android:clipToPadding="false"
同じRelativeLayout
; -
のマージンを削除します。
RelativeLayout
も標高が設定されている。 - [EDIT] エレベーションが必要な子レイアウトに、非透過の背景色を設定する必要がある場合もあります。
最終的に、トップレベルの相対レイアウトは次のようになります。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/block"
android:gravity="center"
android:layout_gravity="center"
android:background="@color/lightgray"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:clipToPadding="false"
>
内部の相対レイアウトはこのようになります。
<RelativeLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:background="[some non-transparent color]"
android:elevation="30dp"
>
関連
-
[解決済み】Android Intent コンストラクタを解決できない
-
[解決済み】Android Studio AVD - Emulator: 終了コード 1 でプロセスが終了
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】Bluestackの向きを変更する : ポートレート/ランドスケープモード
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] TypeError: cb.apply は関数ではありません。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studioでパラメータ化されたユニットテストを実行すると、指定されたインクルードに対するテストが見つからないエラーが発生する
-
[解決済み】Androidエミュレータのエラーメッセージ。"PANIC: Missing emulator engine program for 'x86' CPUS." (パニック: エミュレータ・エンジン・プログラムがありません)
-
[解決済み】新しいAVDを作成すると、CPU/ABIフィールドに「システムイメージがインストールされていません」と表示される。
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】Android Studioでused import文がunused import文に指定されるのはなぜ?
-
[解決済み】アクティビティにない場所でのgetLayoutInflater()の呼び出し
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] Looper.prepare()を呼び出していないスレッドではハンドラを作成できない
-
[解決済み] Android: @drawable/picture を drawable に変換するのに失敗しました。
-
[解決済み] Gradleのエラーです。イベントディスパッチスレッドからの書き込みアクセスは、Android Studioでのみ許可されます。