Android: บรรทัดสุดท้ายของ textview ถูกตัดออก


113

ฉันมีแนวนอนLinearLayoutที่มีTextViewตามมาด้วยSpinnerถัดไป ซึ่งLinearLayoutจะเพิ่มขึ้นแบบไดนามิกหลายครั้งในแนวตั้งคงที่ที่LinearLayoutมีอยู่ภายในไฟล์RelativeLayout.

ปัญหาคือว่าตั้งแต่ผมเปลี่ยนจากTheme.lightการTheme.holo.lightบรรทัดสุดท้ายของการTextViewได้รับการตัดในช่วงครึ่งปี สิ่งนี้เกิดขึ้นเมื่อข้อความไดนามิกมีความยาวและครอบคลุมมากกว่าหนึ่งแถว

ใส่คำอธิบายภาพที่นี่

ฉันสามารถแก้ไขได้โดยการเพิ่มช่องว่างด้านล่างในแนวนอนLinearLayoutที่มีเครื่องหมายTextViewและSpinner.

สิ่งนี้ไม่ได้เป็นการแก้ไข แต่เป็นการแฮ็กมากกว่า ใครช่วยให้คำแนะนำเกี่ยวกับวิธีแก้ไขปัญหานี้อย่างถูกต้องได้ไหม

ฉันได้อ่านคำถามอื่น ๆ ด้วย แต่ดูเหมือนจะไม่มีใครช่วยได้

เค้าโครงเชิงเส้นแนวนอน:

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:text="TextView"/>

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

เลย์เอาต์สัมพัทธ์ที่เลย์เอาต์ด้านบนพองแบบไดนามิกที่ Linear Layout ด้วย id ll2_7:

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

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/relLayoutButtonNext"
        android:layout_below="@id/textView1" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" >

            <TextView
                android:id="@+id/textView10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="30dp"
                android:text="2.7" />

            <TextView
                android:id="@+id/textView11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_toRightOf="@id/textView10"
                android:text="@string/question2_7" />


            <LinearLayout
                android:id="@+id/ll2_7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView11"
                android:layout_below="@+id/textView11"
                android:orientation="vertical" android:layout_marginBottom="20dp">
            </LinearLayout>

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

แก้ไข: นี่คือ xml เลย์เอาต์ที่สมบูรณ์สำหรับด้านบน:

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

    <TextView
        android:id="@+id/textView1"
        style="@style/question_section_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/question2_header" />

    <RelativeLayout
        android:id="@+id/relLayoutButtonNext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/bottomBar"
        android:paddingBottom="3dp"
        android:paddingLeft="50dp"
        android:paddingRight="50dp"
        android:paddingTop="3dp" >

        <Button
            android:id="@+id/buttonNext"
            android:layout_width="180dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:onClick="nextStep"
            android:text="Next Section"
            android:textSize="20sp" />

        <Button
            android:id="@+id/buttonPrevious"
            android:layout_width="180dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:onClick="previousStep"
            android:text="Previous Section"
            android:textSize="20sp" />
    </RelativeLayout>


    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/relLayoutButtonNext"
        android:layout_below="@id/textView1" >



        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" >

            <TextView
                android:id="@+id/textView10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="30dp"
                android:text="2.7" />

            <TextView
                android:id="@+id/textView11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_toRightOf="@id/textView10"
                android:text="@string/question2_7" />


            <LinearLayout
                android:id="@+id/ll2_7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView11"
                android:layout_below="@+id/textView11"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView10"
                android:layout_below="@+id/ll2_7"
                android:text="2.8" />

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_7"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_8" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView3"
                android:layout_below="@+id/textView3"
                android:layout_marginBottom="20dp"
                android:orientation="vertical" >

            </LinearLayout>

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView2"
                android:layout_below="@+id/ll2_8"
                android:text="2.9" />

            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_8"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_9" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView5"
                android:layout_toRightOf="@+id/textView10"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView4"
                android:layout_below="@+id/ll2_9"
                android:text="2.10" />

            <TextView
                android:id="@+id/textView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_9"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_10" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView7"
                android:layout_marginBottom="20dp"
                android:layout_toRightOf="@+id/textView10"
                android:orientation="vertical" >

            </LinearLayout>

            <TextView
                android:id="@+id/textView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView6"
                android:layout_below="@+id/ll2_10"
                android:text="2.11" />

            <TextView
                android:id="@+id/textView9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_10"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/quesiton2_11" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView9"
                android:layout_below="@+id/textView9"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

            <TextView
                android:id="@+id/textView12"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/textView8"
                android:layout_below="@+id/ll2_11"
                android:text="2.11.1" />

            <TextView
                android:id="@+id/textView13"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/ll2_11"
                android:layout_toRightOf="@+id/textView10"
                android:text="@string/question2_11_1" android:layout_marginBottom="10dp"/>


            <LinearLayout
                android:id="@+id/ll2_11_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView13"
                android:layout_toRightOf="@+id/textView10"
                android:orientation="vertical" android:layout_marginBottom="20dp">

            </LinearLayout>

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

ลองลบ android: paddingBottom = "20dp"
Dheeresh Singh

2
ลองเพิ่มช่องว่างบนมุมมองข้อความและระยะขอบของเค้าโครงเชิงเส้นก็อาจช่วยได้เช่นกัน
Aashish Bhatnagar

LinearLayout เป็นปัญหาจริงๆเมื่อใช้ในแนวนอน ใช้ ConstraintLayout แทน ดู. stackoverflow.com/a/48677954/630668
Dharmendra

คำตอบ:


55

ฉันพบปัญหาการตัดเช่นเดียวกันดังที่แสดงในภาพหน้าจอ LinearLayoutมันเกิดจากการจัดตำแหน่งพื้นฐานในแนวนอน TextViewและSpinnerมีเส้นฐานที่แตกต่างกันเนื่องจากความแตกต่างของขนาดตัวอักษร ในการแก้ไขปัญหาจำเป็นต้องปิดใช้งานการจัดแนวพื้นฐานสำหรับเค้าโครงโดยการตั้งค่า:

android:baselineAligned="false"

หรือในรหัส:

layout.setBaselineAligned(false);

2
ฉันหวังว่าฉันจะสามารถโหวตได้ 100 ครั้ง! ฉันเสียเวลาไปมากในช่วงสองสามวันที่ผ่านมากับปัญหานี้และคำตอบของคุณคือทางออกของฉัน! ฉันไม่รู้ว่าเกิดอะไรขึ้นเป็นเวลานานเพราะการดีบักลำดับชั้นมุมมองบน Android นั้นยากมาก ขอบคุณมาก!!!
mbm29414

นี่เป็นวิธีแก้ปัญหาของฉันนอกเหนือจากคำตอบของ Rynardt ขอบคุณ!
James Dobson

1
นี่คือคำตอบที่ถูกต้องและชี้ให้เห็นถึงสาเหตุที่ทำให้เกิดข้อผิดพลาด ขอบคุณ
Hoang Nguyen Huu

นี่เป็นเคล็ดลับอย่างมากสำหรับสถานการณ์เช่นนี้ ไม่เลวเลย ขอบคุณ!
sunlover3

259

หลังจากลองทำสิ่งต่างๆนับล้านครั้งฉันคิดว่าฉันมีคำตอบ

ฉันใช้ a LayoutGravityกับรายการ TextView:

android:layout_gravity="fill"

ดูเหมือนจะแก้ปัญหาการคลิปทั้งหมดที่ฉันมี หวังว่านี่จะช่วยคนที่มีปัญหาเดียวกัน


12
สมบูรณ์ tnx, +1; โปรดทราบว่าค่า layout_gravity จำนวนมากช่วยได้เช่น center_vertical
Grzegorz Dev

2
ในกรณีที่ไม่ได้ผลการเพิ่มค่า padding เป็น "1sp" ควรใช้งานได้ ฉันสร้างสไตล์ขยาย@android:style/Widget.TextViewและเพิ่มบรรทัดต่อไปนี้:<item name="android:gravity">fill</item> <item name="android:padding">1sp</item>
Graeme

ทำไมปัญหานี้เกิดขึ้นเฉพาะกับข้อความภาษาอาหรับ!
Menna-Allah Sami

12
นั่นเป็นเพียงวิธีแก้ปัญหาเท่านั้น วิธีแก้ปัญหาที่เหมาะสมคือเพิ่มลงandroid:baselineAligned="false"ในLinearLayout
tomrozb

1
แม้ว่าจะดูเหมือนว่าจะได้ผล แต่วิธีแก้ปัญหาที่ถูกต้องคือจากความคิดเห็นของ tomrozb ด้านบนหรือคำตอบของ Jusid
Eduard B.

28

ฉันมีปัญหาเดียวกันและพบว่าเพียงแค่เพิ่มไฟล์

android:includeFontPadding="false"

บรรทัดสุดท้ายของข้อความจะไม่มีการตัดลูกหลานอีกต่อไป


1
ด้วยแบบอักษรที่กำหนดเองนี่อาจเป็นวิธีแก้ไขที่สมบูรณ์แบบ นี่เป็นวิธีเดียวที่ใช้ได้ผลสำหรับฉันเมื่อใช้ Droid Sans Japanese
computingfreak

11

ฉันเพิ่มช่องว่างจำลองหลังข้อความโดยการเพิ่ม

textView.setText(firstString+"\n");

ฉันลองวิธีแก้ปัญหาอื่น ๆ ทั้งหมด แต่นี่เป็นทางออกเดียวที่ใช้ได้กับฉัน


สิ่งนี้ที่คุณเรียกว่า "chepi"
Zulqurnain Jutt

6

วาง textview ที่มีปัญหาไว้ในเฟรมเลย์เอาต์ ฉันคิดว่ามุมมองข้อความไม่ได้รับการคำนวณอย่างถูกต้องเนื่องจากมุมมองพี่น้อง Spinner

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

    <FrameLayout
        android:layout_width="150dp"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/textView1"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:text="TextView"/>
    </FrameLayout>
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

1
ผมมีในตัวเดียวกันCheckBox LinearLayoutสิ่งนี้ช่วยแก้ปัญหาได้
Chintan Shah

ทำงานได้อย่างมีเสน่ห์ด้วยสถานการณ์ CheckBox เช่น @ChintanShah
ignacardel

5

เมื่อสิ่งนี้เกิดขึ้นคุณควรตรวจสอบให้แน่ใจว่าไม่ได้TextViewมีขนาดใหญ่กว่าคอนเทนเนอร์ -

หากTextViewตั้งค่าเป็นwrap_contentและเป็นคอนเทนเนอร์ (หรือคอนเทนเนอร์ของบรรพบุรุษ) จะไม่เว้นที่ว่างTextViewให้เติบโตเข้าไปได้

หากเป็นกรณีที่ไม่ได้ก็ยังเป็นไปได้onMeasure()ของTextViewบางครั้งไม่ถูกต้องวัดหางของตัวอักษรอักขระที่ไม่ใช่ภาษาละตินหรือผลกระทบจากข้อความเป็นตัวเอียง คุณสามารถแก้ไขได้โดยการตั้งค่าสไตล์ส่วนกลางสำหรับคุณTextViewเพื่อให้ถูกเลือกขึ้นมาโดยไม่จำเป็นต้องเปลี่ยนฐานรหัสทั้งหมดของคุณ:

ตรวจสอบให้แน่ใจว่าแอปพลิเคชัน / กิจกรรมของคุณใช้ธีมที่กำหนดเองดังนี้:

<style name="Custom" parent="@android:style/Theme.Light">   
    <item name="android:textViewStyle">@style/Custom.Widget.TextView</item>
</style>

<style name="Custom.Widget.TextView" parent="@android:style/Widget.TextView"> 
    <item name="android:gravity">fill</item>
    <item name="android:padding">1sp</item>
</style>

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


5

วิธีแก้ปัญหาของฉันใกล้เคียงกับวิธีที่ยอมรับ แต่ฉันต้องเปลี่ยนเป็น

   android:layout_gravity="fill_vertical"

แทน. มิฉะนั้นแถวอื่น ๆ จะถูกยืดออกเช่นกันโดยมีการเพิ่มการแบ่งบรรทัดในสถานที่สุ่ม ตัวอย่างเช่นแถวที่ใหญ่ที่สุดมี 4 บรรทัดดังนั้นอีกแถวจึงเปลี่ยนจาก

this is a testphrase

ถึง

thi
s is
a testph
rase

1
ใช้ได้ผลสำหรับฉัน ขอบคุณ! +1
Ahmed

5

ฉันพบวิธีแก้ปัญหาอื่นโดยการขยาย TextView และเพิ่มคลาสที่กำหนดเองเช่นนี้:

 public class AdaptingTextView extends TextView {

    public AdaptingTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public AdaptingTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AdaptingTextView(Context context) {
        super(context);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        // set fitting lines to prevent cut text
        int fittingLines = h / this.getLineHeight();
        if (fittingLines > 0) {
            this.setLines(fittingLines);
        }
    }

}

ใช้งานได้ดี แต่โปรดระวังหากคุณมี layout_margin ที่ระบุไว้ใน textview เนื่องจากสามารถเปลี่ยนจำนวนเส้นที่เหมาะสมให้สั้นกว่าที่ควรจะเป็นได้! ฉันเปลี่ยนไปใช้ช่องว่างภายในแทนระยะขอบและแก้ไขปัญหาแล้ว
MobileMon

1
นี่ทำงานได้อย่างสมบูรณ์แบบ ทางออกที่ดีที่สุดที่ฉันพบ
Moonbloom

1
นี่คือคำตอบที่ถูกต้องขอบคุณ! เพื่อให้มันดูดีขึ้นเล็กน้อยและเพิ่ม '... ' ที่ส่วนท้ายของข้อความก่อนที่จะถูกตัดทอนให้เพิ่มthis.setEllipsize(TextUtils.TruncateAt.END);ในคำสั่ง if ด้านบนและลบออกandroid:ellipsize="end"จาก XML ซึ่งด้วยเหตุผลบางประการทำให้มันแตก
NeilS

4

ลองลบ android: paddingBottom = "20dp"

จาก

 <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp" >

1
ช่องว่างภายในไม่มีความเกี่ยวข้องกันเนื่องจากมีรายการเพิ่มเติมที่อยู่ในเลย์เอาต์ที่เกี่ยวข้องกับช่องว่างภายใน ฉันลบออกเพื่อให้อ่านโพสต์นี้ได้ง่ายขึ้น ดูการแก้ไขในคำถาม
Rynardt

4

getViewTreeObserver().addOnGlobalLayoutListenerไม่ทำงานในมุมมองผู้รีไซเคิล หากคุณใช้เครื่องรีไซเคิลให้ใช้View.addOnLayoutChangeListener:

ฉันพบว่าการจุดไข่ปลาที่ฉันกำหนดไว้textViewใน xml นั้นไม่ได้สะท้อนให้เห็นเสมอไปดังนั้นฉันจึงตั้งค่าทางโปรแกรมก่อนที่จะกำหนดคุณสมบัติข้อความใหม่ สิ่งนี้ได้ผลสำหรับฉัน

textView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom,
                                   int oldLeft, int oldTop, int oldRight, int oldBottom) {
            textView.removeOnLayoutChangeListener(this);
            float lineHeight = textView.getLineHeight();
            int maxLines = (int) (textView.getHeight() / lineHeight);
            if (textView.getLineCount() != maxLines) {
                textView.setLines(maxLines);
                textView.setEllipsize(TextUtils.TruncateAt.END);
                // Re-assign text to ensure ellipsize is performed correctly.
                textView.setText(model.getText());
            }
        }
    });

3

หากคุณมีปัญหานี้และคุณTextViewอยู่ใน a RelativeLayoutให้ลองเปลี่ยนRelativeLayoutเป็นไฟล์LinearLayoutไฟล์.

นั่นช่วยแก้ปัญหาให้ฉันได้


นี่เป็นทางออกเดียวที่เหมาะกับฉัน (พฤติกรรมแปลก ๆ )! Thx
mrroboaat

1
คุณจะ "เปลี่ยน" จาก RelativeLayout เป็น LinearLayout ได้อย่างไร หากคุณต้องจัดวางค่อนข้างเป็นไปไม่ได้เลยที่จะใช้ LinearLayout
เหลือเชื่อ

3

คุณสามารถใช้ฟังเค้าโครงส่วนกลางสำหรับ TextView ใน ViewGroup ประเภทใดก็ได้

    final TextView dSTextView = (TextView)findViewById(R.id.annoyingTextView);
dSTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        dSTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        float lineHeight = dSTextView.getLineHeight();
        int maxLines = (int) (dSTextView.getHeight() / lineHeight);

        if (dSTextView.getLineCount() != maxLines) {
            dSTextView.setLines(maxLines);
        }

    }
});

คุณสามารถอ่านเพิ่มเติมได้ที่นี่


1

ฉันคิดว่ามีน้อยมากที่คุณสามารถทำได้โดยการเปลี่ยนเลย์เอาต์ ดังที่ฉันพบว่าวิธีการบางอย่างใช้ได้ผลในบางกรณีเท่านั้น ฉันคิดว่ามันขึ้นอยู่กับลำดับชั้นของเลย์เอาต์ทั้งหมดและไม่ใช่โซลูชันเดียวที่เหมาะกับทุกขนาด ฉันสังเกตด้วยว่ามันเกิดขึ้นโดยเฉพาะเมื่อคุณมีแบบอักษรอื่นที่คุณต้องการตั้งค่าเป็น TextView

วิธีการที่แน่นอนที่ฉันได้ทดลองและทดสอบคือคุณสามารถตั้งค่าแอตทริบิวต์แบบอักษรในโค้ดหลังจากที่มุมมองสูงเกินจริง ฉันสมมติว่าคุณมีแบบอักษรในโฟลเดอร์สินทรัพย์ / ฟอนต์ที่คุณต้องการ

เช่นใน Fragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_view, container, false);
    TextView tv = (TextView)view.findViewById(R.id.text_view);
    tv.setText("Insert text that needs to be displayed");
    AssetManager assetManager = getContext().getAssets();
    Typeface typeFace = Typeface.createFromAsset(assetManager, "Fonts/OpenSans-Light.ttf");
    tv.setTypeface(typeFace , 0); // 0 is normal font
    tv.setPadding(10,  0, 10, 0); // This is not mandatory
}

และในกิจกรรม:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(Resource.Layout.main_activity);
    TextView tv = (TextView)this.findViewById(R.id.text_view);
    tv.setText("Insert text that needs to be displayed");
    AssetManager assetManager = getContext().getAssets();
    Typeface typeFace = Typeface.createFromAsset(assetManager, "Fonts/OpenSans-Light.ttf");
    tv.setTypeface(typeFace , 0); // 0 is normal font
    tv.setPadding(10,  0, 10, 0); // This is not mandatory
}

1

ฉันมีปัญหาเดียวกันนี้และมันน่ารำคาญมาก

เกิดขึ้นกับข้อความภาษาอาหรับเท่านั้น

หากคุณสร้างป้ายกำกับหลายบรรทัดและเพิ่ม\nที่ส่วนท้ายของสตริงก็จะแก้ไขได้ แต่ปัญหาคือจะมีช่องว่างขนาดใหญ่ระหว่างป้ายกำกับนี้และวัตถุด้านล่างเนื่องจากฟิลด์นี้ ตอนนี้มีบรรทัดว่างใหม่ด้านล่าง

การควบคุมแบบกำหนดเองสามารถทำได้เพื่อหลีกเลี่ยงสิ่งนั้น แต่โดยรวมแล้วนี่เป็นจุดบกพร่องที่น่ารำคาญ


หากคุณมีคำถามใหม่โปรดขอได้โดยคลิกที่ถามคำถามปุ่ม หากคุณมีชื่อเสียงเพียงพอคุณอาจโหวตให้คำถาม หรือ "ติดดาว" เป็นรายการโปรดและคุณจะได้รับแจ้งเมื่อมีคำตอบใหม่ ๆ
Martijn Pieters

0

วิธีแก้ปัญหาที่ดีที่สุดคือการเพิ่มมุมมองจำลองของความสูงที่ต้องการ (เช่นจะเป็นการเพิ่มช่องว่างในตัวเอง) ที่ด้านล่างของมุมมองของคุณ

<TableRow
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_marginLeft="5dp"
 android:layout_marginRight="5dp" >
     <View 
       android:layout_width="match_parent" 
       android:layout_height="30dp"/>
</TableRow>

เช่นเดียวกับในกรณีของฉันฉันได้เพิ่มแถวตารางอีกหนึ่งแถวที่ด้านล่างของมุมมอง หวังว่านี่จะช่วยใครบางคนได้


0

ฉันรู้ว่ามันสายไปแล้ว แต่นี่คืองานที่มีเสน่ห์สำหรับฉัน เพิ่มรหัสนี้ในไฟล์textview

android:ellipsize="marquee"
android:layout_weight="1"


-1

ในที่สุดฉันก็แก้ไขได้!

ฉันพยายามเพิ่ม String ใน TextView ในบริการแล้วเรียก scrollTo () บรรทัดสุดท้ายถูกตัดออก!

scrollTo () ควรเรียกใน "Runnable" เช่น:

private ScrollView mScrollView;
public void scrollToBottom()
{
    mScrollView = (ScrollView) findViewById(R.id.debug_textview_scrollview);
    mScrollView.post(new Runnable()
    {
        public void run()
        {
            mScrollView.fullScroll(View.FOCUS_DOWN);
        }
    });
}

ฉันคิดว่าเป็นเพราะในช่วงเวลาหนึ่งของการเรียกใช้ scrollTo () ในบริการการอัปเดต TextView ยังไม่พร้อม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.