Pergunta

Eu tenho um ListView com o costume objetos definidos pelo xml-esquema abaixo. Eu quero o textView com id "info" para ser ellipsized em uma única linha, e eu tentei usar os atributos

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

sem sucesso.

Se eu definir o layout_width para uma largura fixa, como por exemplo.

android:layout_width="100px"

O texto é muito bem truncado. Mas, por razões de portabilidade esta não é uma solução aceitável.

Você consegue identificar o problema?

<?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> 

Foi útil?

Solução

Ellipsize está quebrado (ir votação do relatório bug , especialmente desde que eles afirmam que não é reproduzível), assim você tem que usar um hack menor. Use:

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

em qualquer coisa que você quer ellipsize. Além disso, não use singleLine, ele foi substituído.

UPDATE:

Em uma inspeção mais próxima, o problema que você está tendo é que sua mesa está estendendo para fora do lado direito da tela. Alterando sua definição TableLayout a:

<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">

deve corrigir esse problema, em seguida, fazer o que eu disse acima para ellipsize seu TextView.

Outras dicas

Sem usar propriedades obsoletas, as seguintes linhas grande trabalho para me

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

http://code.google.com/p / android / temas / detalhes? id = 882 # C9

Eu tive os mesmos resultados que Steve:

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

funciona perfeitamente

tentar ...

i.

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

como marquise só funciona quando vista é selecionado ou focada de acordo com o comentário # 2 na http://code.google.com/p/android/issues/detail?id=5364

Depois de verificar estas 3 questões (fechado e reaberto) e tópicos anteriores, acho que a chave é para embrulhar TextView com um LinearLayout exterior (ou qualquer outro layout que você está usando), e definir o " layout_width " da disposição exterior largura um pouco MENOR do que o comprimento do texto contido no TextView. Parece tem que LIMITE a largura para fazer a. "Android: ellipsize" comportar corretamente

Siga a ponta na esta questão , após a adição de todos estes atributos para cortar, eu também definir o layout_width de LinearLayout exterior para 240dp por exemplo:

<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>

Do que eu posso fazer com sucesso no final de TextView exibindo "...", não é muito aceitável, mas funciona! E eu acho que ele funciona se usado em TextView regular ou um TextView em um adaptador List.

Aqui está a minha imagem para o resultado!

Espero que ajude ^^

Ref desses 3 questões:

questão 882

questão 10554

questão 31229

I encontrado em algum lugar este atributos

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

-lo funcionar bem para mim (Android 1.5)

Para mim estes atributo trabalhou. I testado em API 8 em diante

Em XML

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

programação

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

Se você colocar TextView dentro de um costume ViewGroup você criou, certifique-se medi-la novamente se você mudou a dimensão após a medição.

por exemplo., I calculou a nova dimensão em OnLayout. Antes de chamar child.layout, chamada

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

Eu tive o mesmo problema no reciclador cartão de vista. Eu resolvi isso adicionando seguinte código:

    <TextView
        android:ellipsize="end"
        android:maxLines="1"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top