วางโปรแกรมไว้ตรงกลางข้อความ TextView


87

ฉันขอผ่อนปรนที่นี่ฉันเพิ่งเริ่มด้วยบทช่วยสอน Android SDK และฉันกำลังพยายามทำบางสิ่งที่ไม่ได้รับความสนใจซึ่งไม่ได้อยู่ในบทช่วยสอน แต่ฉันหวังว่ามันจะง่าย

ฉันกำลังพยายามจัดกึ่งกลางTextViewรายการโดยใช้รหัสในแนวนอนและแนวตั้ง (ฉันสามารถทำได้ใน XML) ฉันเคยเห็นตัวอย่างวิธีการทำเช่นนี้เมื่อพ่อแม่เป็นตารางหรือวัตถุอื่น ๆ แต่ฉันหวังว่าจะเข้าใจได้ง่ายขึ้น (ps อย่าลังเลที่จะแก้ไขคำศัพท์ของฉัน)

นี่คือโค้ดตัวอย่างจากบทช่วยสอน / รูปแบบการทำงานของฉัน:

package com.example.myfirstapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;


public class DisplayMessageActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        textView.setGravity(View.TEXT_ALIGNMENT_GRAVITY);

        setContentView(textView);
    }
}

ฉันจัดการค้นหาsetGravityวิธีการได้แล้วและฉันพยายามที่จะตะลุยsetLayoutParamsหามัน แต่ฉันไม่แน่ใจว่าขอบเขตคืออะไรเนื่องจากฉันไม่สามารถค้นหาสิ่งที่ฉันควรจะนำเข้าเพื่อให้ได้WRAP_CONTENTค่าคงที่ในการแก้ไข . จากสิ่งที่ฉันเข้าใจศูนย์กลางและ content_wrapping + แรงโน้มถ่วงเป็นสองสิ่งที่แยกจากกัน ฉันต้องการตัวอย่างวิธีการทำทั้งในกรณีนี้และอาจจะพบคำตอบในเอกสาร API ได้อย่างไร / ที่ไหน


ทำไมต้องใช้ textview เป็นเค้าโครงรูทเลย?
Kalpesh Lakhani

ตกลงลองใหม่อีกครั้งเนื่องจากฉันไม่พบปุ่มลบหรือแก้ไขที่นี่ ฉันคิดว่าคอนเทนเนอร์หลักเป็นเลย์เอาต์ที่สัมพันธ์กันเนื่องจากกำลังใช้ (ฉันคิดว่า) activity_display_message.xml ของฉันแหล่งที่มาของบทช่วยสอนนี้เป็นบิตคัดลอก / วาง - ish แต่อยู่ที่: bit.ly/VDh9yS <RelativeLayout xmlns: android = " schemas.android.com/apk/res/android " xmlns: tools = " schemas.android.com/tools " android: layout_width = "match_parent" android: layout_height = "match_parent" tools: context = ". DisplayMessageActivity"> < / RelativeLayout>
Alex Summers

ดูคำตอบที่แก้ไขของฉันอาจช่วยคุณได้ .. :)
Kalpesh Lakhani

คำตอบ:


249
yourTextView.setGravity(Gravity.CENTER);

สมบูรณ์แบบสั้นและหวาน! ทำงานอย่างมีเสน่ห์! ฉันยังเห็นว่ามีคุณสมบัติ CENTER_HORIZONTAL และ CENTER_VERTICAL ขอบคุณสตีฟ!
Alex Summers

2
โปรดทราบว่าจะใช้ได้เฉพาะเมื่อandroid:textAlignment="gravity"แอตทริบิวต์ถูกตั้งค่าเป็นแรงโน้มถ่วง มิฉะนั้นข้อความจะลบล้างการจัดตำแหน่ง
velis

1
สำหรับการกำหนด textAlignment โดยทางโปรแกรม yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji

25

สำหรับศูนย์แบบไดนามิก

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

textView.setGravity (Gravity.CENTER) เวอร์ชันที่ใช้งานไม่ได้และเป็นคำตอบที่ยอดเยี่ยม ขอบคุณ Nirav!
Alex Summers

หวังว่าฉันจะทำได้ฉันเป็นคนใหม่และมีตัวแทนไม่เพียงพอที่จะโหวต ฉันจะให้การตรวจสอบกับ Hari อย่างดีทั้งคำตอบของคุณตรงประเด็นและเพื่อนที่ไม่ดีก็สามารถใช้ตัวแทนได้มากกว่านี้) ซึ่งไม่ได้หักลบกับความจริงที่ว่าคำตอบของคุณมีประโยชน์เท่า ๆ กัน (ถ้าฉันได้รับโอกาสเมื่อตัวแทนของฉันเพิ่มขึ้นไม่แน่ใจว่าจะโหวตคุณทั้งคู่!)
Alex Summers

6

จะได้ผลแน่นอน ..

RelativeLayout layout = new RelativeLayout(R.layout.your_layour); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
params.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(params);
textView.setGravity(Gravity.CENTER);

layout.addView(textView);

setcontentView(layout);

2
LinearLayout ดูเหมือนจะไม่มีคุณสมบัติ CENTER_IN_PARENT เมื่อรับมาจาก android.widget.LinearLayout ฉันพลาดอะไรไปรึเปล่า?
Alex Summers

5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

และ

text.setGravity(Gravity.TOP);

และ

text.setGravity(Gravity.BOTTOM);

และ

text.setGravity(Gravity.LEFT);

และ

text.setGravity(Gravity.RIGHT);

และ

text.setGravity(Gravity.CENTER_VERTICAL);

และ

text.setGravity(Gravity.CENTER_HORIZONTAL);

และอื่น ๆ ยังสามารถใช้ได้


2

ลองเพิ่มรหัสต่อไปนี้เพื่อใช้พารามิเตอร์เค้าโครงกับ TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);

4
LinearLayout ดูเหมือนจะไม่มีคุณสมบัติ CENTER_IN_PARENT
Alex Summers

2

หากขนาดข้อความของคุณมีขนาดเล็กคุณควรกำหนดความกว้างของมุมมองข้อความของคุณเป็น "fill_parent" หลังจากนั้นคุณสามารถตั้งค่า TextView Gravity ให้อยู่กึ่งกลาง:

TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);

1

คุณสามารถใช้สิ่งต่อไปนี้เพื่อจัดTextViewข้อความกึ่งกลางทางโปรแกรมใน Kotlin:

textview.gravity = Gravity.CENTER

1

ลองใช้วิธีนี้

  public void centerTextView(LinearLayout linearLayout) {
    TextView textView = new TextView(context);
    textView.setText(context.getString(R.string.no_records));
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(18.0f);
    textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
    linearLayout.addView(textView);
}

0

ทั้งสองต้องไปด้วยกันเพื่อให้ทำงานได้ ฉันเกาหัวอยู่พักหนึ่ง

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.