ตั้งค่า android: gravity เป็น TextView จากฝั่ง Java ใน Android ได้อย่างไร


219

ฉันสามารถใช้android:gravity="bottom|center_horizontal"xml ใน textview เพื่อให้ได้ผลลัพธ์ที่ต้องการ แต่ฉันต้องทำสิ่งนี้โดยทางโปรแกรม TextView ของฉันคือภายในถ้าเรื่องที่ว่าในtablerowrelativelayout

ฉันเหนื่อย:

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


ขอบคุณที่ใช้งานได้ ตอนนี้ฉันรู้สึกว่าตัวเองโง่ ๆ แต่เดิมปัญหาคือการตั้งค่าระยะขอบบนฟิลด์ข้อความ ฉันเดาฉันคิดว่าเพราะฉันไม่สามารถหาวิธี setMargin () ที่ setGravity คงไม่มีอยู่เช่นกัน
เนท

7
ขอบคุณ +1 ฉันพบเอกสาร แต่ตามปกติมันไปได้ครึ่งทางไม่ชัดเจนว่าฉันได้รับค่าคงที่แรงโน้มถ่วงจาก (Gravity.CENTER ฯลฯ )
Hein du Plessis

1
สำหรับทุกคนที่มาที่นี่จาก Google อย่างฉันวิธี 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 () ได้อย่างไร
คลื่นวิทยุ

4
ฉันพบปัญหา Nate กำลังนำเข้า android.view.ViewGroup ชั้นเรียนนั้นมีวิธีการที่แตกต่างกันและไม่ได้รวบรวม คุณควรนำเข้า android.view.WindowManager แทน
Finnboy11

ควรนำเข้า android.widget.LinearLayout.LayoutParams ดีกว่าเมื่อมุมมองข้อความอยู่ภายในเค้าโครงเชิงเส้น othervise คุณได้รับ 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.setGravity(Gravity.CENTER | Gravity.BOTTOM);

สิ่งนี้จะกำหนดแรงโน้มถ่วงของข้อความของคุณ


0

แก้ไขได้โดยการทำสิ่งที่ไม่กี่ครั้งแรกได้รับheightของฉันTextViewและดำน้ำได้โดยข้อความจะได้รับจำนวนของเส้นไปได้ด้วยsizeTextView

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

หลังจากที่คุณได้รับค่านี้คุณต้องตั้งค่าของคุณTextView maxLinesเป็นค่าใหม่นี้

TextView.setMaxLines(maxLines);

ตั้งค่าGravityการBottomครั้งเดียวจำนวนเงินสูงสุดของสายได้รับเกินและมันจะเลื่อนลงโดยอัตโนมัติ

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.