1

strings.xmlファイルに文字列があります。この文字列の一部をクリックすると、タスクにリダイレクトされます。その部分は文字列のインデックスに基づいて作られています。ローカライズされた文字列を処理すると、単一のTextViewにリンクが含まれます

私はそれをフランス語に翻訳しようとしていますが、英語の文字列の長さがそれ以下であるため、インデックスの境界外の例外が発生しています。

誰でもこのシナリオを処理するにはどうすればよいでしょうか。

文字列の分離は私たちができることのひとつです。

しかし、私はそれを1つのテキストビューで処理したいと考えています。英語の文字列のための

コード:あなたは、デバイスは、それがその後、フランスの文字列や英語の文字列を使用するかどうかを使用している言語を検出する必要がありますが、長さを定義し、各条件でこれを入れ

その後
SpannableString spannableString = new SpannableString(getResources().getString(R.string.desc)); 
    ClickableSpan clickableSpan = new ClickableSpan() { 
     @Override 
     public void onClick(View textView) { 
      Log.v("dosomething", "dosomething"); 
     } 

     @Override 
     public void updateDrawState(TextPaint ds) { 
      Log.v("task one", "task one"); 
     } 
    }; 

    spannableString.setSpan(clickableSpan, 87, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    mDesc.setText(spannableString); 
    mDesc.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

文字列の区切りが必要ですが、 'setSpan()'メソッドでは 'int start'を見つける必要があります。 –

答えて

3

指定された文字列ファイルに対して例:

if (Locale.getDefault().getLanguage().equals("en")) { 
    spannableString.setSpan(clickableSpan, 87, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 
else if (Locale.getDefault().getLanguage().equals("fr")) { 
    spannableString.setSpan(clickableSpan, 50, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

文字列ファイル内の文字列に応じて、開始と終了の長さを変更するだけです。

+0

言語を指定せずにできるかどうか@Bryan – Vji

+0

私はそうだと思います。リソース文字列のサイズを取得し、プログラムの開始時と終了時の長さを計算する必要があります。 – Bryan

関連する問題