2010-09-02 3 views
27

J'essaie de faire en sorte que mes dispositions horizontales tirent parti de la salle disponible.Textview wrap around View

Dans une activité d'affichage d'information, j'ai une «boîte de faits» suivie d'une grande boîte de texte. J'aimerais que l'infobox flotte à droite, comme sur l'image suivante. Est-ce possible en utilisant l'android TextView api?

Est-ce possible en utilisant l'api android TextView?

Example picture

+0

Avez-vous trouvé une solution de travail pour ce problème? – sniurkst

+0

Rien de mieux que webview. Je n'ai pas trouvé un moyen d'utiliser un webview avec des ressources apk. –

+0

des alternatives à l'utilisation d'un webview? – digitalWestie

Répondre

3

Je suggère d'utiliser un WebView pour cela. Vous pouvez formater le texte dans une vue Web avec la mise en forme HTML/CSS habituelle, avec laquelle votre mise en page souhaitée est assez simple à réaliser.

+0

Oui, mais il serait plutôt salissant de partager des ressources et d'autres choses? –

+0

Je downvoted seulement parce qu'il y a une solution plus facile et moins en désordre avec FlowTextView (voir l'autre réponse) –

2

Je crains que ce n'est pas possible avec un seul TextView. Un TextView doit être un rectangle et ne peut pas afficher les vues enfants. Une solution de contournement pourrait être de créer deux TextViews et de faire la première coupe du texte, puis demander au premier textview combien il peut afficher et ajouter le reste de la chaîne à la deuxième vue de texte.

+1

je ne pouvais pas trouver une méthode pour vérifier la quantité de texte peut être affiché dans un TextView. Peut-être y a-t-il un moyen de le faire mais je ne pouvais pas le trouver maintenant. – Janusz

+0

Je connais la méthode Paint.breaktext. Si je pouvais obtenir la peinture à partir du TextView, cela pourrait être faisable. –

10

a trouvé cette solution !! vérifier de la source --->answer source

Comment avoir quelques éléments de mise en page enroulent autour

Voici un problème des gens peuvent rencontrer lorsqu'ils traitent avec mises en page sur Android.

Dites que vous voulez placer une image au milieu d'une phrase. vous pouvez ajouter un couple TextView et un ImageView mais si l'espace horizontal devient trop petit, les deux TextView vont commencer à s'enrouler indépendamment ce qui va paraître bizarre. Vous voudriez que l'image fasse partie de votre TextView et que la phrase entière se déroule bien. Pour cela: * remplacer les trois objets par un Spannable TextView * utiliser un SpannableStringBuilder pour ajouter toutes vos chaînes (ne pas oublier d'ajouter un caractère supplémentaire (un espace par exemple) qui sera remplacé par votre image) * et enfin utiliser setSpan (ImageSpan, début, fin, drapeau) sur ce constructeur où ImageSpan est un ImageSpan contenant le drawable de votre image, commence est l'index du caractère que vous avez inséré

Et voici ce que le code serait ressembler à:

ajouter android: bufferType = "spannable" à votre TextView

SpannableStringBuilder builder = new SpannableStringBuilder(); 
builder.append(mContext.getText(R.string.part1)); 
int lengthOfPart1 = builder.length(); 
builder.append(" "); 
builder.append(mContext.getText(R.string.part2)); 
Drawable d = mContext.getResources().getDrawable(R.drawable.picasaIcon); 
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // <---- Very important otherwise your image won't appear 
ImageSpan myImage = new ImageSpan(d); 
builder.setSpan(myImage, lengthOfPart1, lengthOfPart1 + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
myTextView.setText(builder); 
+2

C'est une bonne astuce. Malheureusement, on ne peut utiliser que spannable pour positionner une image sur une ligne. Je suppose qu'une option pourrait être de couper l'image en beaucoup de morceaux de hauteur de ligne, qui pourraient ensuite être insérés en tant que spannable. –

+0

Wow, merci beaucoup d'avoir posté cette source et cette réponse. J'ai regardé partout et jamais pensé à utiliser un 'Spannable'. Cela devrait être la réponse! – Sakiboy