プログラムでビューにパディングを追加する


235

Android v2.2アプリを開発しています。

私が持っている断片

onCreateView(...)、私のフラグメントのクラスのコールバック、私は以下のようなフラグメントにレイアウトを膨らませます。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.login, null);

    return view;
}

上記のインフレートされたレイアウトファイルは(login.xml)です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
 >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />

</LinearLayout>

paddingTop上記の<LinearLayout>要素にaを設定したいのですが、xmlではなくJavaコードで設定したいと思います。

フラグメントJavaクラスコードでに設定paddingTopする方法は<LinearLayout>


2
LinearLayoutにIDを割り当てて、それを見つけてfindViewById呼び出すことができるようにする必要がありますsetPadding
Aleks G 2012

@AleksG一般的にはい。ただし、LinearLayoutは、ここでは不要な、膨らんだ階層のルート要素であることを考えると。viewはすでにLinearLayoutです。この場合、再び見つける必要はありません。ただし、これは特別なものです。

1
@alextsc:はい、同意します。それでも、私はアプリケーションで参照する可能性のあるものすべてにIDを割り当てることを好みます。
Aleks G 2012

回答:


486

view.setPadding(0,padding,0,0);

これにより、上部のパディングがpadding-pixelsに設定されます。

dp代わりに設定したい場合は、変換を行うことができます:

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

6
@ Leem.finクリスが言うように、それはピクセルです。あなたはDPたい場合は、手動で変換を行う必要があるでしょう:float scale = getResources().getDisplayMetrics().density; int size = (int) (sizeInPx*scale + 0.5f);
Jave

7
0.5fはどこから来るのですか?
Herr von Wurst、2013

11
@Georgコードはここから取得されていること:developer.android.com/guide/practices/... 0.5鋳造する際、最も近い整数値を取得するために使用されている(代わりに使用する恐らくMath.round())
Jave

変数名は逆でなければなりません。sizeInDp実際には、sizeInPxdpsを変換するときに取得するピクセル数です。
friederbluemle 2013年

99

2番目の質問に答えるには:

view.setPadding(0,padding,0,0);

SpKやJaveが提案したように、パディングをピクセル単位で設定します。次のようにdp値を計算することで、dpに設定できます。

int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);

お役に立てば幸いです。


3
もちろん、これは期待どおりにコンパイルおよび動作しますが、明確にするために、int変数の名前を切り替える必要があります。これは、DPでパディングを定義し、この特定のデバイスのピクセル数を計算するためです。
Glenn85 2015

dpをピクセルに変換しています。変数名は紛らわしいです。「paddingPixel」は本当にdpを意味します
Jiechao Wang 2016

92

パディングをリソースファイルに保存する場合は、次のように呼び出すだけです。

int padding = getResources().getDimensionPixelOffset(R.dimen.padding);

それはあなたのために変換を行います。



15

以下のコード全体でプログラムにより、ビューにパディングを設定できます-

view.setPadding(0,1,20,3);

また、さまざまなタイプのパディングが利用可能です-

パディング

パディングボトム

パディング左

パディング右

パディング上

これらのリンクは、Androidデベロッパーサイトを参照します。これがあなたの役に立つことを願っています。


@ Leem.fin 違いを知ることができる、これを見てください
Praveenkumar 2013年

9

を使用するTypedValueと、手動で計算するよりもピクセルに変換する方法がはるかにわかりやすくなります。

float paddingDp = 10f;
// Convert to pixels
int paddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingDp, context.getResources().getDisplayMetrics());
view.setPadding(paddingPx, paddingPx, paddingPx, paddingPx);

基本的TypedValue.applyDimensionに、現在のデバイスのディスプレイプロパティに応じて、必要なパディングを適切にピクセルに変換します。

詳細については、TypedValue.applyDimension Docsを参照してください。


1
pxとdpを逆にしてはいけませんか?
chris838

私がやっていることの要点は正しいと思います。しかし、ネーミングはわかりにくいと思います。より明確になるように編集します。フィードバックをお寄せいただきありがとうございます。
i2097i 2017

7

動的にパディングを設定するには、以下のメソッドを使用します

setPadding(int left, int top, int right, int bottom)

例:

view.setPadding(2,2,2,2);

3

次のコードを記述してパディングを設定すると、役立つ場合があります。

TextView ApplyPaddingTextView = (TextView)findViewById(R.id.textView1);
final LayoutParams layoutparams = (RelativeLayout.LayoutParams) ApplyPaddingTextView.getLayoutParams();

layoutparams.setPadding(50,50,50,50);

ApplyPaddingTextView.setLayoutParams(layoutparams);

使用するLinearLayout.LayoutParamsRelativeLayout.LayoutParams、または子ビューの親レイアウトに従って


setPadding()は、LayoutParamsからアクセス可能なメソッドではありません。それがあったかどうかはわかりません。
スリラム

2
Context contect=MainActivity.this;
TextView tview=new TextView(context);
tview.setPaddingRelative(10,0,0,0);

4
このコードスニペットをありがとうございます。このコードスニペットは、制限された即時のヘルプを提供する可能性があります。適切な説明が大幅にこれは問題に良い解決策であり、他、同様の質問を将来の読者にそれがより便利になるだろう、なぜ示すことによって、その長期的な価値を向上させるであろう。回答を編集して、仮定を含めて説明を追加してください。
山羊座

0

プログラムでパディングしながら、ピクセルをDpに変換して、密度に関連する値に変換します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.