web-dev-qa-db-fra.com

Android - Les plages SPAN_EXCLUSIVE_EXCLUSIVE ne peuvent pas avoir une longueur nulle

J'ai la mise en page suivante (pratiquement vide):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/set_layout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:contentDescription="content desc"
    Android:orientation="vertical" >

    <TextView Android:id="@+id/text"
          Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"
          Android:text="Hello, I am a TextView" />
</LinearLayout>

La classe d'activité contient les éléments suivants:

public class TestActivity extends Activity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);   
  }
}

Lorsque j'exécute cette opération sur mon appareil mobile, l'erreur suivante apparaît:

SpannableStringBuilder
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

J'ai essayé cela avec et sans TextView et l'erreur persiste, je dois faire quelque chose de fondamentalement faux pour une mise en page aussi élémentaire. 

Quelqu'un at-il des idées sur la façon dont je peux le charger sans l'erreur?

169
DMac

J'ai rencontré les mêmes erreurs dans LogCat. Dans mon cas, cela est dû au clavier tiers que j'utilise. Lorsque je rétablis le clavier Android, l'entrée d'erreur ne s'affiche plus.

223
Jack

Parce que l'erreur que vous obtenez est pas liée à une EditText, alors c'est pas liée à votre clavier.

Les erreurs que vous obtenez ne sont pas le résultat de votre code. vous effectuez probablement des tests sur un appareil Samsung doté du TouchWiz de Samsung.

J'ai eu les mêmes erreurs, puis j'ai testé sur un Nexus S (également de Samsung, mais sous Android pur sans TouchWiz) et je n'ai pas eu cette erreur.

Donc, dans votre cas, ignorez simplement ces erreurs lors des tests sur un périphérique! :)

107
Karim

En regardant votre code, je ne sais pas pourquoi vous obtenez cette erreur, mais j'avais la même erreur, mais avec les champs EditText.

Changer Android:inputType="text" (ou l'une des autres variantes de texte inputType) en Android:inputType="textNoSuggestions" (ou Android:inputType="textEmailAddress|textNoSuggestions", par exemple) l'a corrigé. 

Vous pouvez également définir ceci dans le code avec quelque chose comme 

mInputField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

On dirait qu'Android suppose par défaut que les champs EditText auront des suggestions. Quand ils ne le font pas, il se trompe. Pas à 100% confiant dans cette explication, mais les changements mentionnés ci-dessus l'ont corrigé.

http://developer.Android.com/reference/Android/text/Spanned.html#SPAN_EXCLUSIVE_EXCLUSIVE

J'espère que cela t'aides!

40
tim

Sur votre téléphone Android, allez à:
Paramètres -> Gestionnaire d'applications -> Tous -> Clavier Samsung puis cliquez sur "Vider le cache"
(supprime toutes les données collectées par cette application).

14
Celebes

Essayez d'utiliser le clavier Android par défaut, il disparaîtra 

11
Yasin Hassanien

Assurez-vous que vous avez passé une valeur dans votre MainAcitivity pour les méthodes suivantes onCreateOptionsMenu et onCreate

Dans certains cas, le développeur supprime l'instruction "return super.onCreateOptionsMenu (menu)" et devient "return true".

4
Masood Moshref

Cela a fonctionné pour moi ... sur chaque appareil

    <EditText
        Android:maxLines="1"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:textSize="15sp"
        Android:layout_centerVertical="true"
        Android:textColor="#000"
        Android:id="@+id/input_search"
        Android:background="@null"
        Android:inputType="text"
        Android:hint="Enter Address, City or Zip Code"
        Android:imeOptions="actionSearch"
        />

En code Java:

mSearchText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
            if(actionId == EditorInfo.IME_ACTION_SEARCH
                    || actionId == EditorInfo.IME_ACTION_DONE
                    || keyEvent.getAction() == KeyEvent.ACTION_DOWN
                    || keyEvent.getAction() == KeyEvent.KEYCODE_ENTER){

                //execute our method for searching
            }

            return false;
        }
    });
2
Rahul Nehul

Pour essayer de déboguer cette erreur, allez d’abord sur votre terminal/console Android et exécutez cette commande:

ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)

si la sortie apparaît comme votre application, c’est votre application qui cause l’erreur. Essayez de chercher Strings vide que vous passez dans la layout.

J'ai eu exactement le même problème et c'était de ma faute car je passais un String vide dans ma mise en page. Après avoir changé le "" en " ", cette erreur a disparu.

Si vous n'obtenez pas votre application à partir de la sortie de la console, c'est quelque chose d'autre qui la cause (probablement, comme d'autres l'ont dit, le clavier Android).

1
dazito

Masood Moshref a raison, cette erreur se produit car le menu d'options de Menu n'est pas bien préparé en l'absence de "return super.onCreateOptionsMenu (menu)" dans la méthode onCreate ().

1
hqgoldswan

J'ai eu le même avertissement et j'ai constaté que la suppression d'un @id inutilisé permettait de s'en débarrasser. Pour moi, il était évident que le @id était associé à une liste croissante de textViews liés à une base de données, il y avait donc un avertissement pour chaque entrée.

1
k.e.n.

J'ai eu le même problème alors je l'ai corrigé en suivant le code!

  text = (EditText)findViewById(R.id.TextVoiceeditText); 
  text.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
0
Opriday

Dans mon cas, les champs EditText avec inputType en tant que text/textCapCharacters couvraient cette erreur. Je l’ai remarqué dans mon logcat chaque fois que j’utilisais backspace pour supprimer complètement le texte saisi dans l’un de ces champs.

La solution qui a fonctionné pour moi a été de changer le type inputType de ces champs en textNoSuggestions car il s’agissait du type le plus adapté et ne m’apportait aucune erreur indésirable.

0
Ankush Chauhan

J'ai fait face au même problème. J'ai presque perdu presque deux semaines à résoudre ce problème ..__ Enfin, j'ai eu un doute sur moi-même et j'ai essayé de créer un autre projet en copiant/collant des fichiers de démarrage comme SplashScreen & LoginScreen.

Mais avec le même code, j'obtenais encore SPAN_EXCLUSIVE_EXCLUSIVE .

Ensuite, j'ai supprimé le code du gestionnaire de l'écran de démarrage et essayé à nouveau et Wow son fonctionnement . Je ne reçois pas SPAN_EXCLUSIVE_EXCLUSIVE issue dans logcat

Je me demande pourquoi c'est? jusqu’à ce que le temps n’ait pas eu d’autre solution mais en supprimant le gestionnaire de l’écran de démarrage, cela fonctionne.

Essayez de mettre à jour ici si cela est résolu ou non.

0
Sachin Shelke

Vérifiez si des éléments tels que des boutons ou des vues de texte sont dupliqués (copiés deux fois) à l'écran. J'ai fait cela inaperçu et j'ai dû faire face au même problème.

0
Dibyendu Mitra Roy

J'ai rencontré ce problème aussi lorsque j'ai copié du texte à partir d'Internet. Ma solution est de supprimer le formatage du texte/supprimer avant tout traitement ultérieur. 

0
codingpuss

essayez d’éviter d’utiliser view dans un fichier XML.J'ai aussi le même problème, mais quand j’ai supprimé la vue. sa a fonctionné parfaitement.

comme exemple:

             <EditText
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"                   
                Android:hint="Username"
                Android:inputType="number"                   
                Android:textColor="#fff" />

            <view
                Android:layout_width="match_parent"
                Android:layout_height="1dp"
                Android:background="#f9d7db" />

vérifiez également et essayez de changer par essais et erreurs Android: inputType = "numéro" en Android: inputType = "text" ou, mieux, ne pas l'utiliser s'il n'est pas requis .Parfois, le clavier est bloqué et génère des erreurs dans certains les appareils.

0
Eshan Chattaraj

cette erreur se produit également en raison d'une modification de l'URL de l'API. essayez de frapper l'URL que vous utilisez dans postman and c s'il fonctionne correctement . revérifier les API résolu mon problème

0
Aditya Dabas

J'ai eu le même problème mais avec un listView .... je l'ai résolu parce que j'utilisais un mauvais R.id.listView que la vue liste devait avoir une valeur, dans mon cas c'était des chaînes que j'ai sauvegardées sur listView2 ... donc le bon code était R.id.listView2

0
Andrea