2010-11-22 29 views
3

Je développe une application de navigateur pour Android 2.2. Bien sûr, cette application nécessite un élément d'interface utilisateur pour entrer une URL. Existe-t-il un moyen de réutiliser les composants de l'interface utilisateur tels que ceux utilisés dans le navigateur Android par défaut, Dolphin HD ou Fennec? Je ne veux pas reconstruire toutes les fonctionnalités à partir de zéro comme - auto-complétion/Suggestions de google - («www » sans) auto-sélection du nom de domaineExiste-t-il un composant d'interface utilisateur Android (réutilisable) pour un champ de saisie d'URL prenant en charge l'auto-complétion et les suggestions?

Répondre

2

Je ne sais pas le comportement exact de chaque type d'entrée, mais peut-être ce sera une aide: https://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

si vous trouvez un bon type, s'il vous plaît donner un bref retour.

+0

Merci pour votre réponse. Pour autant que je comprends l'android: inputType définit uniquement la disposition du clavier à l'écran (quelles touches doivent être affichées). J'utilise android: inputType = "textUri" pour le moment. Mais cet attribut n'active pas les fonctionnalités requises, telles que l'auto-complétion des URL. – janjonas

2

Maintenant, j'ai trouvé une chose intéressante: Il y a un widget appelé AutoCompleteTextView.

Vous devez définir un adaptateur, qui contient les entrées automatiques complètes disponibles. Si vous interceptez l'événement de modification de texte, il vous suffit d'obtenir l'entrée en cours dans la vue texte et d'implémenter une recherche des URL disponibles et d'ajouter le résultat à l'adaptateur de tableau. Ces nouvelles entrées s'affichent en tant que finitions automatiques disponibles de votre entrée actuelle.

Le code peut être quelque chose comme ceci:

public class AutoCompleteTest 
    extends Activity 
    implements TextWatcher 
{ 

private AutoCompleteTextView autoCompleteView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(final Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(layoutRes); 
    this.autoCompleteView = (AutoCompleteTextView) findViewById(viewId); 
    this.autoCompleteView.addTextChangedListener(this); 
    this.autoCompleteView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 

public void onTextChanged(final CharSequence currentSubmission, final int start, final int before, final int count) 
{ 
    new Thread() { 

     @Override 
     public void run() 
     { 
      // your code for retrieving url for the current input 
      // maybe a remote service request 
      final String[] urls; 

      final Bundle data = new Bundle(); 
      data.putStringArray("urls", urls); 

      final Message msg = new Message(); 
      msg.setData(data); 
      MultiTouchTest.this.messageHandler.sendMessage(new Message()); 
     } 

    }.start(); 
} 

public void afterTextChanged(final Editable s) 
{ 
    // do nothing 
} 

public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) 
{ 
    // do nothing 
} 

private final Handler messageHandler = new Handler() { 

    @Override 
    @SuppressWarnings("unchecked") 
    public void handleMessage(final Message msg) 
    { 
     final ArrayAdapter<String> adapter = (ArrayAdapter<String>) MultiTouchTest.this.autoCompleteView.getAdapter(); 
     final String[] urls = msg.getData().getStringArray("urls"); 
     for (final String url : urls) 
     { 
      adapter.add(url); 
     } 
     adapter.notifyDataSetChanged(); 
    } 

}; 

} 

Le code n'a pas été testé et je ne sais pas, comment récupérer l'URL suggèrent.

+0

Merci encore pour votre réponse. L'élément AutoCompleteTextView est exactement ce que j'ai recherché. J'ai trouvé "l'API de recherche personnalisée" de google (http://code.google.com/apis/customsearch/v1/overview.html) et "l'API Google Web Search" obsolète (http://code.google.com/apis/websearch /) qui pourrait être utilisé pour implémenter un adaptateur. Malheureusement, Google limite le nombre de demandes par jour. Après avoir fait quelques recherches, je ne pense pas qu'il y ait un service gratuit et illimité. – janjonas