Androidアプリで要素間のマージンを調整する方法 - Kotlin拡張コードを使用してマージンを設定

  前書き

今日は、超簡単な小技を皆さんに共有します。
Androidアプリを設計する際に、コードを使って要素のマージンを調整する方法です。
この方法は便利なだけでなく、デザインをより美しくすることができます。
初心者のエンジニアでも簡単にマスターできます!
一緒に学びましょう!

  基本的な方法

Androidで要素間のマージンを調整する方法は複数ありますが、この記事ではKotlin拡張コードを使用してマージンを設定する方法を紹介します。
その前に、
xmlでviewのマージンを設定する場合、
最も直接的な方法は一行だけです。
android:layout_marginLeft="30dp"

場合によっては、
要求者がAndroid View要素間のマージンを動的に設定するよう求めることがあります。
通常、以下の方法を使用できます。

この方法では、LayoutParamsをインスタンス化し、
上下左右のマージンを設定してからViewにセットする必要があります。
しかし、複数の場所でこのマージン設定方法を使用する必要がある場合、
コードが冗長になり、保守が難しくなります。

この問題を解決するために、
Kotlin Extensionを使用してマージン設定方法を実装できます。
これにより、コードがより簡潔で保守しやすくなります。

  Kotlin Extensionを使用して実装

  ステップ0. まずは完全な拡張関数を示します

このコードはすでに直接使用できます。
プロジェクトにコピーして、
直接viewを呼び出すだけです!
vb.btConfirmZero.margin(top = 0F)
vb.btConfirmOne.margin(bottom = 30F,right = 2F)
vb.btConfirmTwo.margin(bottom = 10F,left = 3F)
ここまで理解できたら、直接ステップ5に進んでください。


  ステップ1. どのように実装するか?

まず、以下のように関数を作成します。



上記のコードの説明

  1. ここでは、blockという名前のfunction typeを渡します。
    これはKotlinの変数の一種です(他の言語にもあるかもしれませんが、Javaはまだサポートしていません)。
    (Function typeの説明はこちらを参照:クリック)
    Function typeを使用すると、lambdaを操作できます(Javaにもlambdaがありますが、現在のところfunction typeはありません)。
  2. 我々はここでジェネリックを使用しています
    そして型変換を使用してジェネリックを変換しました
    コンパイル時に暗黙の型キャストと見なされてエラーが発生する可能性があります
    したがって、明確なクラスがない場合
    直接キャストすると
    `xxxxClass cannot be cast to zzzzClass` のようなエラーが発生する可能性があります
    または、一部のコンパイラは直接`unchecked cast`警告を表示します

    もちろん、clazz: Classのようなものを渡して実際のクラスを判断することもできます
    しかし、そうするとコードが増えます
    クラスが多くなると、さらに多くのコードを書き、同じことを繰り返すことになります...など

    したがって、ここでは`reified`を解決策として使用しました
    これは、この種の問題を解決するためにKotlinが提供する使い方の一つです
    -> reifiedを使用するには`inline`を付ける必要があります


その後、次のように呼び出すことができます


上記のコードの説明

ここでは、異なるViewGroup.LayoutParamsに対応するためです
将来、ViewGroup.LayoutParamsを継承する実体クラスが増えた場合
より柔軟に操作できるようにします


  Step2. dpをpxに変換するメソッドを書く

  • ここは非常に簡単です 主に間隔を設定する際にピクセルを使用するため 変換メソッドを書きました

  Step3. 拡張したlayoutParamsを使用してレイアウトのパラメータを変更する

上記のコードの説明

ここでは、先ほど書いたView.layoutParamsを使用して設定したいビューを操作します

以前はJavaで設定する際、必ず上下左右の4つのパラメータを一度に入力する必要がありました
したがって、ここでは
left: Float? = null, top: Float? = null, right: Float? = null, bottom: Float? = null
として、4つの位置の間隔をすべてnullに設定します
そしてKotlinのnull安全の特性を使用してチェックします。例えば
left?.run { leftMargin = convertDpToPixel(this) }
値がある場合にのみマージンの間隔値を設定します
null例外を心配する必要がなく、変更したい位置だけを柔軟に入力できます


  Step5. 最後に簡単に使用する

You might also enjoy