如果区域设置=en,则获取英文字母,如果不是,则获取北欧字符



如果我选择英语语言,我一直试图只获得英语字符(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;
}

在Java中没有办法得到国家字母表。

英文字母表很简单,因为字母A-Z在ASCII字符集中是连续的,Unicode也使用ASCII字符集。在其他字符集中,例如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

这会影响字典的排序顺序,其中德语可能与所示排序相同,但也可能不同。

在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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZu00C6u00D8u00C5"; // Danish
    else if (lang.equals(new Locale("no").getLanguage())
        this.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZu00C6u00D8u00C5"; // Norwegian
    else if (lang.equals(new Locale("sv").getLanguage())
        this.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZu00C5u00C4u00D6"; // Swedish
    else if (lang.equals(new Locale("de").getLanguage())
        this.letters = "Au00C4BCDEFGHIJKLMNOu00D6PQRSu00DFTUu00DCVWXYZ"; // 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;
}

最新更新