web-dev-qa-db-ja.com

Android:プログラムでtextviewのパディングを1つだけ設定します

Textviewの最上部のパディングをプログラムで設定したい。メソッドsetPadding()でこれを行うことができることを知っています。しかし問題は、このメソッドには4つのパラメーター(左、上、右、下)が必要なことです。左、右、下を変更したくないので、上のパディングを変更したいだけです。

それは可能ですか?

25
Xander

使用する

_    yourTextView.setPadding(0, 10, 0, 0);
_

必要なパラメーターのみを調整し、他のパラメーターをゼロに設定します。

他の既存のパディングを保持する必要がある場合は、yourView.getPaddingLeft()yourView.getPaddingTop()などを使用します。

72
Droidman

私は通常、他のパディングを忘れたり、置き忘れたりしないために、単純なユーティリティメソッドを作成します。

public static void setPaddingLeft(View v, int leftPaddingDp) {
    int leftPaddingPx = dpToPx(leftPaddingDp);
    v.setPadding(leftPaddingPx, v.getPaddingTop(), v.getPaddingRight(), v.getPaddingBottom());
}

あとでこのように使用するには、あたかもxmlsのようにdpユニットを提供します:

Utils.setPaddingLeft(myExampleTextView, 10)
18
pkk

以下のコードは正常に動作しています。

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);
0
murugan mani

これも使用できます

setPadding(view, 500, Padding.TOP);

@ IntDef定義の助けを借りて:

public static void setPadding(View view, int padding, @Padding.Direction int direction) {
    switch (direction) {
        case Padding.LEFT:
            view.setPadding(padding, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom());
            return;
        case Padding.RIGHT:
            view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), padding, view.getPaddingBottom());
            return;
        case Padding.TOP:
            view.setPadding(view.getPaddingLeft(), padding, view.getPaddingRight(), view.getPaddingBottom());
            return;
        case Padding.BOTTOM:
            view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), view.getPaddingRight(), padding);
            return;
        default:
    }
}

public static class Padding {
    @IntDef({Padding.LEFT, Padding.RIGHT, Padding.TOP, Padding.BOTTOM})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Direction {}
    public static final int LEFT = 0;
    public static final int RIGHT = 1;
    public static final int TOP = 2;
    public static final int BOTTOM = 3;
}
0
lenhuy2106