13

Android アプリケーションで使用可能な言語のみを取得したいと考えています。つまり、res フォルダーに values- (values-en、values-fr など) という名前のフォルダーがある言語のみを取得したいと考えています。

私は言語コードを保存したくありません.フォーム値の「res」のすべてのサブフォルダーをリストし、それらの名前から言語コードを取得すると思います。(最終的にコードが Locale.getAvailableLocales() によって返された配列にあるかどうかをチェックして、それが正しいことを確認します)。このアイデアは、使用可能な言語を取得する方法 (すべての言語ではなく、アプリで使用可能な言語のみ) に記載されています。

使ってみました

getResources().getAssets().list("res"); getResources().getAssets().list("/res"); 
getResources().getAssets().list("/res/");

しかし、どれも機能しませんでした。

「res」フォルダーのサブフォルダーを一覧表示する方法を知っていますか?

前もって感謝します。

4

2 に答える 2

2

これを行う直接的な方法はわかりませんが、アセットフォルダーで同様のことを行ったところ、うまく機能するはずです。私はビルドに Windows で IntelliJ IDEA と ANT を使用していますが、これを Eclipse または他の IDE と *nix/OSX に適応させることができるはずです。

コンパイルする前に、ANT ビルド ファセットを使用して dir コマンドを実行し、assets フォルダー内のすべてのファイルを一覧表示して、出力をテキスト ファイルにパイプします。

dir /assets /s /b > /res/raw/filelist.txt

次に、filelist.txt をハッシュマップに読み込み、任意のファイルを非常に簡単かつ迅速に見つける方法を提供します (数十のアセット サブフォルダーに数百のファイルがあり、AssetManager は頭が死んでいて、それを処理できません)。

public class AssetsFileManager {

   private static Map<String, String> files = new HashMap<String, String>();

   static{

        BufferedReader in = new BufferedReader(new InputStreamReader(this.getResources.openRawResource(R.raw.filelist)))
        String line = "";
        while ((line = in.readLine()) != null) {               
           map.put(line.substring(line.lastIndexOf("\\")+1), line);
        }
        in.close();
   }
}

エスケープされたバックスラッシュに注意してください。\\

これにより、ファイル名とフルパスを値としてキーにしたマップが得られます。

このアプローチを簡単に適用して、フォルダー リストを取得できます。たとえば、使用する可能性がありますdir /ad /b /s

于 2012-11-23T16:19:53.997 に答える