トップページ > 記事閲覧
Android版:セーフエリアの表示領域
名前:motoYo 日時: 2022/04/23 23:16

Android版DxLibを、使い方のページに従ってセットアップしました。 Android版DxLibを利用したアプリケーションを実行すると 画面の表示領域がセーフエリア(?)をカバーせず、黒い帯が表示されてしまいます。 セーフエリア(?)をカバーして描画を行うことは可能でしょうか? カメラ部(縦持ち時の上部に当たる部分)にのみ黒帯が表示されるのですが、 画面向きを横向きにした場合、黒帯を省いた部分で中央に位置調整されるため、 画面が少し右/左に寄ってしまい、見た目がよろしくない形になってしまいます。 他のゲーム等では、セーフエリア上含めて描画を行うことができているものもあり、 実現可能ではないかと思い、質問させていただきました。 環境 DxLib:Android版(Ver3.23) AndroidStudio 2020.3.1 Patch3(日本語化パッチ適応) 端末:Xiaomi Mi 11 Lite 5G
メンテ

Page: 1 |

Re: Android版:セーフエリアの表示領域 ( No.1 )
名前:motoYo 日時:2022/04/24 09:50

セーフエリアへ(ノッチ部)への描画について調べていたら、自己解決しました。 端末上で、アプリのノッチ部への描画の有無を、個別に任意で設定できるようです。 (コントロールセンターとステータスバー > 各アプリのノッチ表示) また、デフォルトの描画有無も設定できました。 公式では、「カットアウト領域への描画」と書かれているみたいです。 https://developer.android.com/guide/topics/display-cutout?hl=ja ここに書いてあることに従って、themes.xmlに <item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="o_mr1">shortEdges</item> を追加することで、カットアウト領域への描画や、中央寄せが可能になりました。 現状、カットアウト領域の存在する端末が多数を占めている以上、 ミニテクニック等に記載があると良いように思えます。 また、これに関連した質問で、カットアウト領域の座標等を取得することはできるのでしょうか。 取得できれば、UI配置などに活かせるような気もします。 (DxLibの質問とは離れてしまう気もしますが...)
メンテ
Re: Android版:セーフエリアの表示領域 ( No.2 )
名前:管理人 日時:2022/04/24 23:29

無事解決できたようで何よりです そしてご情報ありがとうございます 近いうちにカットアウト領域への描画についてのミニテクニックページを作成したいと思います > 現状、カットアウト領域の存在する端末が多数を占めている以上、 > ミニテクニック等に記載があると良いように思えます。 そうなのですね 丁度購入している端末がカットアウト領域が存在しないものばかりだったので 多数を占めているとは知りませんでした (・・; ( なので手元に1台もカットアウト領域が存在する端末が無いので、検証のためにも領域ありの端末を1台中古で購入しました ) > また、これに関連した質問で、カットアウト領域の座標等を取得することはできるのでしょうか。 載せていただいたページを拝見する限りでは Java のコードを使用すれば WindowInsets.getDisplayCutout() などの API で取得することができそうです ただ、C++ のコードから取得できれば便利なので、C++ の関数として実装できないか試してみます ( 少し時間が掛かりそうなので、作業できるのはゴールデンウィーク中になるかもしれませんが… )
メンテ
Re: Android版:セーフエリアの表示領域 ( No.3 )
名前:管理人 日時:2022/05/07 03:51

お待たせしました、カットアウト領域の座標を取得するための関数を追加しましたので、 よろしければ関数を追加したこちらの暫定最新バージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版 以下の関数を追加しました // ディスプレイカットアウト領域の数を取得する int GetDisplayCutoutRectCount( void ) ; // ディスプレイカットアウト領域の矩形を取得する( 引数の No はカットアウト領域の番号 ) RECT GetDisplayCutoutRect( int No ) ; カットアウト領域の取得に対応しているのは Android 9.0 以降なので、それ以前のバージョンでは GetDisplayCutoutRectCount も GetDisplayCutoutRect も使用してもエラーを返します ( GetDisplayCutoutRectCount は -1 が返り、GetDisplayCutoutRect はメンバー変数が全部 -1 の RECT が返ります ) カットアウト領域は複数ある場合があるので、GetDisplayCutoutRectCount で領域の数を取得して GetDisplayCutoutRect の引数で領域の番号を指定して領域の矩形情報である RECT を取得する形となります よろしければお試しください m(_ _)m
メンテ
Re: Android版:セーフエリアの表示領域 ( No.4 )
名前:motoYo(解決済み) 日時:2022/06/13 22:04

検証とお返事が遅くなってしまい、申し訳ございません。 手持ちの端末で確認したところ、カメラ領域にあたる部分のみがカットアウト領域として判断されました。 <item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="o_mr1">shortEdges</item> を記載した際に実際にカットされる領域とは違いますが、この値を利用することで座標調整等を行うことは可能になりました。 目的の機能の実装が可能となったため、解決済みとさせていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存