AndroidでJava側からandroid:gravityをTextViewに設定する方法


219

android:gravity="bottom|center_horizontal"テキストビューのxmlで使用して希望の結果を得ることができますが、これはプログラムで行う必要があります。私のtextviewはの中tablerowで重要relativelayoutです。

私が試してみました:

LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
labelTV.setLayoutParams(layoutParams);

しかし、私が正しく理解すればtablerow、それはテキストビューではなくに適用されますか?

回答:


523
labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Kotlinバージョン(Thommyに感謝)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

また、重力について話しているのですか、layout_gravityについて話しているのですか?後者はRelativeLayoutでは機能しません。


うまくいきました。私はそれを逃したので、今は少しばかげています。もともと問題は、テキストフィールドのマージンの設定でした。setGravityも存在しないsetMargin()メソッドが見つからなかったため、私は推測したと思います。
2010

7
おかげで+1を見つけましたが、いつものように途中までしか行きません。重力定数(Gravity.CENTERなど)からどこに重力定数を取得するのか明確に述べていません。
Hein du Plessis

1
Googleからのここに来て、誰のために、私のように、Kotlinの方法がある:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

コトリンのやり方は私にとって混乱しorていandますが、なぜそれがそうであり、そうではないのですか?!??!
ZooMagic

38

これにより、テキストがテキストビューの中央に配置されます。

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);

5
それはうまくいきませんでした。「lp.gravityは解決できないか、フィールドではありません」
ネイト

このコードは機能し、私にとっては問題なくコンパイルされるため、これは奇妙です。setWeight()メソッドがないので、テキストビューの重みをどのように設定しますか?
無線周波数

4
問題が見つかりました。Nateはandroid.view.ViewGroupをインポートしています。そのクラスにはさまざまな種類のメソッドがあり、コンパイルされません。代わりにandroid.view.WindowManagerをインポートする必要があります。
Finnboy11 2012年

テキストビューが線形レイアウト内にある場合は、android.widget.LinearLayout.LayoutParamsをより適切にインポートする必要があります。ClassCastException
tomm

ありがとう、うまくいきました。ただし、のタイプはLayoutParamsここでは定義されておらず、変化する可能性があるため、完全には解決されないため、コンパイルできません。親レイアウト(たとえば、LinearLayout)を知っている必要があり、ここに記述します。
CoolMind 2016年

7

以下のように、どのビューにもレイアウトの重力を設定できます。

myView = findViewById(R.id.myView);
myView.setGravity(Gravity.CENTER_VERTICAL|Gravity.RIGHT);
 or
myView.setGravity(Gravity.BOTTOM);

これは以下のxmlコードと同等です

<...
 android:gravity="center_vertical|right"
 ...
 .../>

レイアウトの重力は重力と同じではありません
Zvonimir Peran 2017年

3

使用する必要がありますtextView.setGravity(Gravity.CENTER_HORIZONTAL);

使用することを覚えておいてください

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

動作しません。これにより、テキストではなくウィジェットの重力が設定されます。



2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

これにより、テキストビューの重力が設定されます。


0

いくつかのことを実行してこれを解決しました。最初heightにmy を取得TextViewし、テキストでそれをダイビングして、でsize可能な合計行数を取得しますTextView

int maxLines = (int) TextView.getHeight() / (int) TextView.getTextSize();

この値を取得したらTextView maxLines、この新しい値に設定する必要があります。

TextView.setMaxLines(maxLines);

最大行数を超えたらに設定するGravityBottom、自動的に下にスクロールします。

if (TextView.getLineCount() >= maxLines) {
    TextView.setGravity(Gravity.BOTTOM);
}

これが正しく機能するためには、を使用append()する必要があります。これが機能しないTextView場合setText()

TextView.append("Your Text");

この方法の利点はheight、ユーザーTextViewやテキストに関係なく、動的に使用できることですsize。レイアウトを変更する場合でも、このコードは機能します。

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