1. ホーム
  2. android

[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?

2022-07-19 06:38:26

質問

マイナスマージンのデモ

シナリオ

ビューの 1 つに負のマージンを設定して、他のビューのバウンディング ボックスに侵入させることで、ビューをオーバーラップさせます。

感想

本来であれば、レイアウトが重なって期待通りに動作しそうです。しかし、知らず知らずのうちに正しいことを行わなかったために、より大きな問題に遭遇することは避けたいと思います。エミュレーター、物理デバイス、その他何でも、負のマージンを使用すると、すべてが正しく動作するように見えますが、あるビューが別のビューのバウンディング ボックスに侵入し、レイアウトでどのように宣言されるかによって、他のビューの上になるか下になるかが異なります。

私はまた、API 21 以降では translationZ elevation 属性は、ビューを他のビューの上や下に表示させることができますが が気になります。 は、基本的に を使用することです。 に対して layout_margin 属性のために、以下のように明確に指定されています。 のマージン値は正であるべきです。 と明記されています。

抜粋です。

このビューの左側、上側、右側、下側に余分なスペースを指定します。このスペースは、このビューの境界の外側にあります。 マージンの値は正数でなければなりません。 . これは浮動小数点数に "14.5sp" のような単位を付加した次元値である必要があります。利用可能な単位は、px(ピクセル)、dp(密度非依存ピクセル)、sp(優先フォントサイズに基づく拡大縮小ピクセル)、in(インチ)、mm(ミリメートル)...です。

最初にこの質問をしたときから数年間、私はネガティブマージンについて何の問題もありませんでした。 ではなく そのため、ドキュメントにそのように記載されていても、私はあまり心配していません。

どのように解決するのですか?

2010 年に、@RomainGuy (Android のコア エンジニア) は次のように述べています。 負の余白の挙動が不定であった .

2011 年、@RomainGuy は次のように述べました。 にネガティブマージンを使用することができます。 LinearLayoutRelativeLayout .

2016年、@RomainGuyは次のように述べています。 で公式にサポートされたことはなく、今後もサポートされることはない。 ConstraintLayout .

しかし、この制限を回避するのは簡単です。

ベースビューの下部にヘルパービュー (高さ 0dp、幅は親に拘束) を追加し、下部に必要なマージンを追加します。

次に、ビューをこのビューの下に配置し、効果的に負のマージンを持つことを可能にしますが、サポートされていない負の値を使用する必要はありません。