2015-09-18 42 views
0

如果我選擇英文,我一直試圖僅獲取英文字符(26個字符),如果選擇任何北歐語言,我一直試圖獲得29個北歐字符。我很難找到如何讓這個工作。如果區域設置= en和北歐字符,如果不是

public LetterAdapter(Context c) { 
    letters=new String[29]; 
    for (int a = 0; a < 26; a++) { 
     letters[a] = "" + (char)(a+'A'); 
    } 
    letters[26] = "\u00C6"; 
    letters[27] = "\u00D8"; 
    letters[28] = "\u00C5"; 

    letterInf = LayoutInflater.from(c); 
} 

字母[26],[27],[28]是特殊的字符是北歐字母添加和我嘗試顯示/隱藏如果區域被設置爲「EN」或其他。我已經使用這個嘗試:

public int getCount() { 
    if(!Locale.getDefault().getLanguage().equals("en){ 
     return letters.length; 
    }else{ 
     return letters.length-3; 
    } 
} 

這並沒有什麼,我要麼得到所有29個字符,或只有26

這是我getView

public View getView(int position, View convertView, ViewGroup parent) { 
    Button letterBtn; 
    if (convertView == null) { 
     letterBtn = (Button)letterInf.inflate(R.layout.letter, parent, false); 
    } else { 
     letterBtn = (Button) convertView; 
    } 
    letterBtn.setText(letters[position]); 
    return letterBtn; 
} 

缺少什麼我在這裏。

回答

0

Java沒有辦法獲得國家字母表。

英文字母很容易,因爲字母A-Z在ASCII字符集中是連續的,Unicode字符集也使用這種字符集。在其他字符集中,例如EBCDIC,事實並非如此。

您必須提供您需要支持的各種字母。


對於那些不知道我們在說什麼的SO用戶,有些語言在字母表中有多餘的字母。對於比較:

English: a bcdefghijklmno pqrs tu vwxyz 
Danish: a bcdefghijklmno pqrs tu vwxyzæøå 
Norwegian: a bcdefghijklmno pqrs tu vwxyzæøå 
Swedish: a bcdefghijklmno pqrs tu vwxyzåäö 
German: aäbcdefghijklmnoöpqrsßtuüvwxyz 

這會影響字典排序順序,其中德國可能有點像顯示,但可以different

在Java中,可以使用Collator對不同語言(語言環境)適當地排序字符串,但不能用於檢索字母表。


更新

LetterAdapter的代碼應該創建具有適當長度的陣列,且應該能夠支持像上面所示的德國字母。另外,getLanguage()的javadoc指出getLanguage().equals("xx")不好。

因此,潛在的實施,以字母串代替字母排列:

private final String letters; 
public LetterAdapter(Context c) { 
    String lang = Locale.getDefault().getLanguage(); 
    if (lang.equals(new Locale("da").getLanguage()) 
     this.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00C6\u00D8\u00C5"; // Danish 
    else if (lang.equals(new Locale("no").getLanguage()) 
     this.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00C6\u00D8\u00C5"; // Norwegian 
    else if (lang.equals(new Locale("sv").getLanguage()) 
     this.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00C5\u00C4\u00D6"; // Swedish 
    else if (lang.equals(new Locale("de").getLanguage()) 
     this.letters = "A\u00C4BCDEFGHIJKLMNO\u00D6PQRS\u00DFTU\u00DCVWXYZ"; // German 
    else 
     this.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // English (and others) 

    letterInf = LayoutInflater.from(c); 
} 
public int getCount() { 
    return this.letters.length(); 
} 
public View getView(int position, View convertView, ViewGroup parent) { 
    Button letterBtn; 
    if (convertView == null) { 
     letterBtn = (Button)letterInf.inflate(R.layout.letter, parent, false); 
    } else { 
     letterBtn = (Button) convertView; 
    } 
    letterBtn.setText(String.valueOf(this.letters.charAt(position))); 
    return letterBtn; 
} 
+0

所以,我應該如何去實現我想要什麼?基本上我試圖做的是顯示字母[]值0-25(英文字母),當語言環境是英語時,整個數組如果不是英語。我能夠通過執行letters.length來顯示整個數組;在getCount()或英語字母表中通過執行letters.length-3 ;.但是我不能根據選擇的語言來改變這兩者。 –

+0

什麼是「整個陣列」?丹麥語,瑞典語和德語是3種不同的字母。其他語言添加帶有變音符號的字母。要支持所有,你必須顯示所有的Unicode字母。這是一個*巨大的*清單。 – Andreas

+0

如果您檢查我的代碼,letterAdapter是特定的,我解析數組以獲取A-Z中的字符,然後手動輸入ÆØÅ以填充陣列。當Locale設置爲英文時,我想要做的是顯示A-Z,如果是丹麥語,則顯示A-Å。因此,如果language = danish,我希望整個數組A-Å顯示在gridView(它爲每個字符生成按鈕)和A-Z(如果language = english)。 不知道如何解釋,否則。 –

相關問題