如果locale = en,则获取英文字母,如果不是,则获取北欧字符

时间:2015-09-18 01:50:52

标签: java android gridview android-arrayadapter

如果我选择英语,我一直在努力获得英文字符(26个字符),如果我选择任何北欧语言,我一直试图获得所有29个北欧字符。我很难找到如何让它发挥作用。

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;
}

我在这里缺少什么。

1 个答案:

答案 0 :(得分:0)

Java无法获得全国字母表。

英文字母很简单,因为字母A-Z在ASCII字符集中是连续的,Unicode也使用它。在其他字符集中,例如EBCDIC,情况并非如此。

您必须提供支持所需的各种字母。

对于SO用户而言,不知道我们在说什么,有些语言在字母表中有额外的字母。为了比较:

LetterAdapter

这会影响字典排序顺序,其中德语可能如图所示排序,但可以是different

在Java中,Collator可用于为不同语言(语言环境)适当地排序字符串,但不能用于检索字母表。

<强>更新

getLanguage().equals("xx")中的代码应该创建具有适当长度的数组,并且应该能够像上面显示的德语一样支持字母表。此外,getLanguage()的javadoc指出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; } 不好。

所以,潜在的实现,用字母串替换字母数组:

ComboBox.ObjectCollection