2015-10-19 22 views
2

如何在android中以編程方式獲取在「語言和輸入設置」下列出的所有已安裝或支持的語言的列表。我已經使用Resources.getSystem()。getAssets()。getLocales(),但它只給我這種語言的代碼,如en,en_us,但我需要代碼和顯示名稱。 我也嘗試過使用Locale.getAvailableLocales(),但它給我重複的項目和太大的列表。在Android手機中列出所有已安裝或支持的語言

請告訴我這樣做的正確方法是什麼。

回答

2

getAvailableLocales()給你所有的語言,但作爲一個/多個國家可以有相同的語言,它是重複的,你可以使用

public ArrayList<String> getAllLanguages() 
{ 
Locale[] locales = Locale.getAvailableLocales(); 
ArrayList<String> languages=new ArrayList<String>(); 
for(Locale temp : locales) 
{ 
    if(!languages.Contains(temp.getDisplayLanguage())) 
    languages.Add(temp.getDisplayLanguage()); 
} 
    return languages; 
} 

好的過濾它,這將努力獲得語言下輸入設置

private ArrayList<String> getInputLanguages() { 
     ArrayList<String> inputlanguages=new ArrayList<String>(); 
     InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     List<InputMethodInfo> ims = imm.getEnabledInputMethodList(); 

     for (InputMethodInfo method : ims){ 
      List<InputMethodSubtype> submethods = imm.getEnabledInputMethodSubtypeList(method, true); 
      for (InputMethodSubtype submethod : submethods){ 
       if (submethod.getMode().equals("keyboard")){ 
       String currentLocale = submethod.getLocale(); 
       Locale locale = new Locale(localeString); 
       String currentLanguage = locale.getDisplayLanguage(); 
       inputlanguages.Add(currentLanguage);   

       } 
      } 
    } 
return inputlangauges; 
} 
+0

感謝Rajan提供了一個很好的邏輯,我實現了這一點,現在給了我獨特的語言列表。如果我只想列出「語言和輸入設置」下列出的那些語言,那麼我需要爲此做些什麼。 感謝您的幫助。 –

+0

我想這些是語言,它屬於語言和輸入設置 –

+0

感謝您的答覆。我已在「語言和輸入設置」下檢查了語言列表,但該列表與使用Locale.getAvailableLocales()的列表不同,您對此有任何想法。 非常感謝你在高級.. –

1

是你可以使用獲得通過 列表一樣下languageand輸入設置

String[] systemLocaleIetfLanguageTags = Resources.getSystem().getAssets().getLocales(); 
相關問題