2012-05-15 3 views
0

J'ai créé un widget avec du texte. Je veux ajouter ... à la fin du texte où il n'y a pas assez de place pour montrer tout le texte. J'ai utilisé android:ellipsize="end" mais seules les deux premières lignes sont visibles.Android en utilisant ellipsize sur le texte du widget

C'est la mise en page du widget:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="64dip" 
    android:layout_height="72dip" 
    android:layout_gravity="center" 
    android:id="@+id/widgetlayout"> 

    <ImageView android:id="@+id/ImageView01" 
    android:layout_width="72dip" 
    android:layout_height="72dip" 
    android:scaleType="fitXY"> 
    </ImageView> 

    <TextView 
     android:id="@+id/tvConfigInput" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:gravity="left" 
     android:textColor="#FFFFFF" 
     android:layout_margin="2dip"  
     android:ellipsize="end" 
     android:textSize="12dip" /> 

</RelativeLayout> 

La première image est l'effet de ellipsize. Le second est sans. Vous pouvez voir qu'il y a assez de place pour afficher plus de texte.

enter image description here J'ai essayé dans un widget 1x2 également, même chose se produit

enter image description here

Merci à Devunwired, je suis en train maintenant avec cela, mais rien n'a changé (je suppose que je fais mal sg)

RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget_layout); 

     TextPaint paint = new TextPaint(); 
     final float densityMultiplier = this.getResources().getDisplayMetrics().density; 
     final float scaledPx = 20 * densityMultiplier; 
     paint.setTextSize(scaledPx); 
     final float size = paint.measureText(widgettext); 
     Log.i("size", size + ""); //1716 e.g 

     while (widgettext != TextUtils.ellipsize(widgettext, paint, (float)GetDipsFromPixel(72), TextUtils.TruncateAt.END)) { 
      paint.setTextSize(paint.getTextSize() - 1); 
     } 

     views.setTextViewText(R.id.tvConfigInput, widgettext); 
     views.setTextColor(R.id.tvConfigInput, loadedtextcolor); 

     views.setFloat(R.id.tvConfigInput, "setTextSize", int_widgetfontsize); 
+0

si vous définissez 'Android: minLines' à 3, est-il arrêter à 3 ou est-ce que corriger le bogue? – Blundell

+0

Avez-vous toujours la valeur 'android: ellipsize =" end "' dans votre XML. Cela doit disparaître si vous faites les choses manuellement. – Devunwired

+0

Bien sûr, je l'ai enlevé – erdomester

Répondre

2

Vous avez trouvé un de mes bugs cadre préférés: http://code.google.com/p/android/issues/detail?id=2254

N'hésitez pas à l'étoile et j'espère que nous verrons une solution pour cela bientôt. Les commentaires à l'intérieur indiquent également un certain nombre de solutions que vous pouvez implémenter avec une vue personnalisée pour surmonter le problème. Vous pouvez également placer manuellement les points de suspension en utilisant une combinaison de Paint.measureText() et TextUtils.ellipsize()

HTH

+0

Il semble que ce bug a été depuis 3 ans maintenant. J'ai aimé votre solution de contournement, pourriez-vous vérifier si je me trompe? Le code est dans le message principal – erdomester

Questions connexes