حجم القطع الناقص لا يعمل مع عرض النص داخل عرض القائمة المخصص

StackOverflow https://stackoverflow.com/questions/1424276

  •  07-07-2019
  •  | 
  •  

سؤال

لدي عرض قائمة يحتوي على كائنات مخصصة محددة بواسطة تخطيط XML أدناه.أريد أن يتم تحديد حجم عرض النص ذو المعرف "info" على سطر واحد، ولقد حاولت استخدام السمات

android:singleLine="true"
android:ellipsize="end"

بدون نجاح.

إذا قمت بتعيين Layout_width على عرض ثابت مثل على سبيل المثال.

android:layout_width="100px"

يتم اقتطاع النص بشكل جيد.ولكن لأسباب تتعلق بقابلية النقل، فإن هذا ليس حلاً مقبولاً.

يمكنك اكتشاف المشكلة؟

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5px"
>
<TextView  
android:id="@+id/destination"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="22dp"
android:paddingLeft="5px"
/>

<TextView  
android:id="@+id/date"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="15dp"
android:paddingLeft="5px"
/>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/info_table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5px"
android:paddingTop="10px" 
>
    <TableRow>
        <TextView
            android:id="@+id/driver_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/driver_label" />
        <TextView
            android:id="@+id/driver" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/passenger_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/passenger_label" />
        <TextView
            android:id="@+id/passengers" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/info_label"
            android:gravity="right"
            android:paddingRight="5px" 
            android:text="@string/info_label"/>
        <TextView
            android:id="@+id/info"
            android:layout_width="fill_parent"
            android:singleLine="true"
            android:ellipsize="end" />
    </TableRow>
</TableLayout> 

هل كانت مفيدة؟

المحلول

حجم القطع الناقص مكسور (اذهب التصويت على تقرير الشوائب, ، خاصة وأنهم يزعمون أنه غير قابل للتكرار) لذا عليك استخدام اختراق بسيط.يستخدم:

android:inputType="text"
android:maxLines="1"

على أي شيء تريد حجمه الناقص.أيضاً، لا تستخدم singleLine, ، لقد تم إهماله.

تحديث:

عند الفحص الدقيق، المشكلة التي تواجهها هي أن طاولتك تمتد إلى الجانب الأيمن من الشاشة.تغيير الخاص بك TableLayout تعريف ل:

<TableLayout
    android:id="@+id/info_table"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="5px"
    android:paddingTop="10px"
    android:shrinkColumns="1">

يجب أن تحل هذه المشكلة، ثم افعل ما قلته أعلاه لحذف حجمك TextView.

نصائح أخرى

ودون استخدام خصائص إهمال، السطور التالية بجهد كبير بالنسبة لي

android:ellipsize="end" 
android:lines="1"
android:scrollHorizontally="true"

http://code.google.com/p / الروبوت / قضايا / التفاصيل؟ ID = 882 # C9

وكان لي نفس النتائج ستيف:

والروبوت: ellipsize = "سرادق" الروبوت: scrollHorizontally = "صحيح" الروبوت: خطوط = "1"

ويعمل تماما

ومحاولة ...

وأي بمعنى.

android:ellipsize="marquee"
android:focusable="true" android:marqueeRepeatLimit="num|marquee_forever"
android:lines="1" android:focusableInTouchMode="true"
android:scrollHorizontally="true"

وكما سرادق يعمل فقط عندما يتم تحديد عرض أو تركز وفقا لتعليق رقم 2 على <لأ href = "http://code.google.com/p/android/issues/detail؟id=5364" يختلط = " noreferrer نوفولو "> http://code.google.com/p/android/issues/detail؟id=5364

بعد التحقق من هذه المشكلات الثلاث (المغلقة والمعاد فتحها) والمشاركات السابقة، أعتقد أن المفتاح هو اختتام TextView باستخدام LinearLayout خارجي (أو أي تخطيط آخر تستخدمه)، وتعيين "Layout_width"من عرض التخطيط الخارجي قليلاً الأصغر من طول النص الموجود في TextView.يبدو أن حد العرض لجعل "android: ellipsize" يتصرف بشكل صحيح.

اتبع التلميح في هذه المسألة, ، بعد إضافة كل هذه السمات للقرصنة، قمت أيضًا بتعيين Layout_width للتخطيط الخطي الخارجي على 240dp على سبيل المثال:

<Linearlayout
  android:layout_width="240dp"
  android:layout_height="wrap_content"
  ...>

    <TextView
     ....
     android:singleLine="true"
     android:lines="1"
     android:maxLines="1"
     android:scrollHorizontally="true"
     android:ellipsize="end"
     android:text="this is a text which length should be longer than 240dp"
    />
</LinearLayout>

يمكنني أن أجعل نهاية عرض TextView "..." بنجاح غير مقبولة جدًا ولكنها تعمل!وأعتقد أنه يعمل سواء تم استخدامه في TextView العادي أو TextView في محول القائمة.

ها هي لقطة الشاشة الخاصة بي لمعرفة النتيجة!

hope it helps ^^

المرجع لهذه المسائل الثلاث:

العدد 882

العدد 10554

العدد 31229

ولقد وجدت في مكان ما هذه الصفات

<TextView ...
android:singleLine="true"
android:ellipsize="marquee" />

وأنها تعمل بشكل جيد بالنسبة لي (الروبوت 1.5)

وبالنسبة لي عملت هذه السمة. اختبرت على API 8 وما بعده

في XML

<TextView
 ....
 android:maxLines="1"
 android:scrollHorizontally="true"
 android:ellipsize="end"
 ....
/>

وبرمجيا

setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);

إذا كنت وضعت داخل TextView مخصص ViewGroup قمت بإنشائه، للتأكد من قياس ذلك مرة أخرى إذا قمت بتغيير البعد بعد القياس.

ومنها مثلا، I حساب بعدا جديدا في onLayout. قبل الاتصال child.layout، دعوة

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));

وكان لي نفس المشكلة في بطاقة عرض إعادة تدوير. لقد حل هذا عن طريق إضافة التعليمات البرمجية التالية:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top