5

TTSエンジンを使用してユーザーにフィードバックを送信するアプリケーションを作成しました。パフォーマンスを向上させる目的で、メソッドsynthesizeToFileaddSpeechメソッドを使用しましたが、合成されるテキストの文字列はstrings.xmlファイル内にあるため、TTSエンジンによって話される文字列ごとにこれらのメソッドを呼び出す必要があります。

TTSエンジンは、名前が。で始まる文字列のみを使用するため、ファイル内tts_で始まるすべての文字列を簡単に繰り返すことができますか?tts_strings.xml

4

5 に答える 5

11

リフレクションを介してstrings.xml内のすべての文字列を取得し、次のように必要な文字列のみを除外できます。

for (Field field : R.string.class.getDeclaredFields())
{
  if (Modifier.isStatic(field.getModifiers()) && !Modifier.isPrivate(field.getModifiers()) && field.getType().equals(int.class))
  {
    try
    {
      if (field.getName().startsWith("tts_"))
      {
        int id = field.getInt(null);
        // do something here...
      }
    } catch (IllegalArgumentException e)
    {
      // ignore
    } catch (IllegalAccessException e)
    {
      // ignore
    }
  }
}
于 2013-07-12T04:28:41.183 に答える
8

それらすべてに(定義中に)リソース名をとして与えることができます"prefix"+(1..n)。そして、コードの使用では、

int resid=<constant>;
for(i=1;resid!=0;i++){
        resid = this.getResources().getIdentifier("prefix"+i, "strings", this.getPackageName());
}
于 2012-05-17T10:09:41.673 に答える
2

これらのTTS文字列をTypedArrayに入れることができます。

于 2012-05-18T03:24:23.030 に答える
0

このコードを使用できます:

String[] strings = getResources().getAssets().list("string");
for (int i = 0; i < strings.length; i++) {
                Log.d("aaa ", strings[i]);
            }

フォントなどの他のリソースを反復処理するには、文字列をフォルダ名に置き換えるだけです。

于 2021-10-16T09:21:56.360 に答える
-1

私のすべてのプロジェクトで、R.javaの文字列の値がで始まり、...0x7f050000のように上向きにカウントされることを確認しました。0x7f050001, 0x7f050002, 0x7f050003,

あなたは++それらだけである可能性があります:D

それが役に立てば幸い :)

于 2012-05-17T10:05:44.307 に答える