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>
を記載した際に実際にカットされる領域とは違いますが、この値を利用することで座標調整等を行うことは可能になりました。
目的の機能の実装が可能となったため、解決済みとさせていただきます。
|