안드로이드의 안드로이드 쪽에서 android : gravity를 TextView로 설정하는 방법


219

android:gravity="bottom|center_horizontal"원하는 결과를 얻으려면 textview에서 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 () 메서드를 찾을 수 없기 때문에 가정했습니다.
Nate

7
고마워 +1, 나는 문서를 찾았지만, 평소와 같이 (Gravity.CENTER 등)에서 중력 상수를 얻는 곳을 명확하게 언급하지는 않았지만 반쯤 진행됩니다.
Hein du Plessis

1
나처럼 구글에서 온 사람이라면 Kotlin의 방법은 다음과 같습니다.it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

나에게 kotlin 방법은 혼란 스럽습니다. 왜 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를 해결할 수 없거나 필드가 아닙니다"
Nate

이 코드가 작동하고 나에게 잘 컴파일되기 때문에 이상합니다. setWeight () 메소드가 아니기 때문에 텍스트 뷰의 가중치를 어떻게 설정 하시겠습니까?
radiofrequency

4
나는 문제를 발견했다. Nate가 android.view.ViewGroup을 가져오고 있습니다. 해당 클래스에는 다양한 종류의 메소드가 있으며 컴파일되지 않습니다. 대신 android.view.WindowManager를 가져와야합니다.
Finnboy11

텍스트보기가 선형 레이아웃 내에있을 때 android.widget.LinearLayout.LayoutParams를 가져 오는 것이 좋습니다. 다른 사람은 ClassCastException
tomm

고마워요. 그러나 LayoutParams여기에 유형이 정의되어 있지 않고 달라질 수 있으므로 완전한 솔루션 이 아닙니다. 따라서 컴파일되지 않습니다. 부모 레이아웃 (예 :)을 알고 LinearLayout여기에 작성해야합니다.
CoolMind

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

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 textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");

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

이것은 텍스트 뷰의 중력을 설정합니다.


0

몇 가지 작업을 수행 하여이 문제를 해결하고 먼저 height내 것을 가져 와서 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.