Je suis sur le développement d'un type d'application Twitter où je veux que l'utilisateur serait affiché les délais et le TextView dans les listes nécessitent d'effectuer des clics sur (http://)URLs, (@) noms d'utilisateur, et (#) hasTags et je veux invoquer des méthodes personnalisées sur ces actions, j'ai utilisé la classe Linkify et les actions, mais d'aucune utilité parce que la personnalisation que je demande ne peut être incorporéeAndroid Twitter Application Développement et utilisation de TextView et Linkify
Répondre
J'ai une solution au problème de vérifier le lien aller http://www.orangeapple.org/?p=354
beaucoup addLinks()
méthodes sur Linkify
, dont l'un peut vous permettre d'atteindre vos objectifs, si votre objectif est de démarrer une activité à partir de ces liens.Vous pouvez également examiner le code source à Linkify
pour voir comment vous pourriez créer le vôtre qui répond à vos besoins.
Mais j'ai besoin d'obtenir un appel de méthode, ou une méthode d'interface pour le match Regex particulier comment est-ce possible en utilisant le Linkify –
10 Je doute que ce soit possible. – CommonsWare
Maintenant, c'est ce que ma demande exacte est. Cela peut-il être réalisé en utilisant d'autres moyens? S'il vous plaît n'importe quel pointeur dans cette direction m'aiderait vraiment beaucoup –
mentionné ci-dessous Voici ma solution. L'idée principale est de diviser les mots du texte et la création d'un TextView pour chacun, envelopper chaque ligne avec LinearLayout horizontale et les lignes en LinearLayout verticale:
private LinearLayout mDescription; // vertical LinearLayout
private void setDescriptionText(String twitterText){
String[] splitted;
String regexp = "(@[-a-zA-Z0-9_]*)|(#[-a-zA-Z0-9_]*)|(http://[-a-zA-Z0-9/._]*)|(https://[-a-zA-Z0-9/._]*)|()";
TextSplitter splitter = new TextSplitter(regexp);
splitted = splitter.split(twitterText);
TextView[] textViews = new TextView[splitted.length];
for (int i = 0; i < splitted.length; i++) {
final String str = splitted[i];
TextView textView = new TextView(mDescription.getContext());
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
textViews[i] = textView;
textView.setText(str);
textView.setTypeface(roboReg);
textView.setTextColor(Color.WHITE);
if (str.startsWith("@")){
textView.setTextColor(mLinkColor);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startWebViewActivity("https://twitter.com/"+str.substring(1));
}
});
}else if (str.startsWith("#")){
textView.setTextColor(mLinkColor);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startWebViewActivity("https://twitter.com/#!/search/?q="+str.substring(1) + "&src=hash");
}
});
}else if (str.startsWith("http://") || str.startsWith("https://")){
textView.setTextColor(mLinkColor);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startWebViewActivity(str);
}
});
}
}
int maxWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 210, getResources().getDisplayMetrics());
populateText(mDescription, maxWidth , textViews, mDescription.getContext());
}
private void populateText(LinearLayout ll,int maxWidth, View[] views, Context mContext) {
ll.removeAllViews();
LinearLayout.LayoutParams params;
LinearLayout newLL = new LinearLayout(mContext);
newLL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
newLL.setGravity(Gravity.LEFT);
newLL.setOrientation(LinearLayout.HORIZONTAL);
int widthSoFar = 0;
for (int i = 0; i < views.length; i++) {
LinearLayout LL = new LinearLayout(mContext);
LL.setOrientation(LinearLayout.HORIZONTAL);
LL.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
LL.setLayoutParams(new ListView.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
views[i].measure(0, 0);
params = new LinearLayout.LayoutParams(views[i].getMeasuredWidth(),
LayoutParams.WRAP_CONTENT);
LL.addView(views[i], params);
LL.measure(0, 0);
widthSoFar += views[i].getMeasuredWidth();// YOU MAY NEED TO ADD THE MARGINS
if (widthSoFar >= maxWidth) {
ll.addView(newLL);
newLL = new LinearLayout(mContext);
newLL.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
newLL.setOrientation(LinearLayout.HORIZONTAL);
newLL.setGravity(Gravity.LEFT);
params = new LinearLayout.LayoutParams(LL
.getMeasuredWidth(), LL.getMeasuredHeight());
newLL.addView(LL, params);
widthSoFar = LL.getMeasuredWidth();
} else {
newLL.addView(LL);
}
}
ll.addView(newLL);
}
private class TextSplitter {
private Pattern pattern;
private boolean keep_delimiters;
public TextSplitter(Pattern pattern, boolean keep_delimiters) {
this.pattern = pattern;
this.keep_delimiters = keep_delimiters;
}
public TextSplitter(String pattern, boolean keep_delimiters) {
this(Pattern.compile(pattern == null ? "" : pattern), keep_delimiters);
}
public TextSplitter(String pattern) {
this(pattern, true);
}
public String[] split(String text) {
if (text == null) {
text = "";
}
int last_match = 0;
LinkedList<String> splitted = new LinkedList<String>();
Matcher m = this.pattern.matcher(text);
while (m.find()) {
splitted.add(text.substring(last_match, m.start()));
if (this.keep_delimiters) {
splitted.add(m.group());
}
last_match = m.end();
}
splitted.add(text.substring(last_match));
return splitted.toArray(new String[splitted.size()]);
}
}
- 1. Android Linkify à partir de HTML dans TextView
- 2. Android TextView Linkify problème avec les numéros de téléphone et le numéro de version de l'application
- 3. comment textview et android
- 4. Android textview et Menu
- 5. Android Textview Italique et wrap_contents
- 6. Intégration de Facebook et Twitter avec mon application Android
- 7. Twitter quelqu'un application Android
- 8. Twitter Application-android
- 9. Développement d'applications Eclipse et Android
- 10. ImageView et TextView float (gauche/droite) Android
- 11. Défilement TextView et animation sous Android
- 12. Utilisation Android et XML
- 13. Android Linkify TransformFilter ne transforme pas
- 14. Android: onTouchEvent pour textView
- 15. Android TextView
- 16. Kickstart développement de l'application Twitter
- 17. Application Android et Timers
- 18. Android TextView avec barres de défilement et maxHeight
- 19. Android TextView et comment déterminer le nombre de caractères visibles
- 20. Utilisation de l'API Twitter
- 21. ImageMenuItem et textview
- 22. Développement d'applications pour iPhone et Android
- 23. Ressources Drawable et NetBeans (développement Android)
- 24. Android TextView Minuterie
- 25. Développement d'une application pour iPhone et iPad
- 26. Utilisation d'onglets et de MapActivity (Android)
- 27. Android Autocomplte Textview Filtrage
- 28. Formatage Android TextView
- 29. Intégration et authentification de Twitter
- 30. Enregistrement d'une application avec Twitter nécessaire avant son développement
Pouvez-vous expliquer ce que vous voulez faire exactement? – Steve
"Ceci est un #test d'expressions régulières avec des liens http://example.com tels qu'ils sont utilisés dans @twitter. Http://twitter.com." si c'est un texte dans le TextView alors j'ai besoin de #test, http://example.com, @twitter et http://twitter.com comme des chaînes séparées et Clickable de Textview et si vous cliquez dessus, je les exige pour être manipulé dans une coutume méthode pour donner mes actions sur ces chaînes –
Cette action est-elle possible de quelque manière que ce soit –