Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果locale=en,则获取英文字母;如果locale=en,则获取北欧字符_Java_Android_Gridview_Android Arrayadapter - Fatal编程技术网

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

Java 如果locale=en,则获取英文字母;如果locale=en,则获取北欧字符,java,android,gridview,android-arrayadapter,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"; le

我一直在尝试,如果我选择英语,我只会得到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);
}
这没有任何作用,我要么得到全部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字符集。例如,在其他字符集中,情况并非如此

您必须提供需要支持的各种字母表

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

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中,a可以用于对不同语言环境的字符串进行适当排序,但不能用于检索字母表

更新

LetterAdapter中的代码应该创建具有适当长度的数组,并且应该能够支持如上所示的德语字母表。另外,的javadoc声明getLanguage.equalsxx是错误的

因此,可能的实现是用字母字符串替换字母数组:

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-25的英语字母,如果不是英语,则显示整个数组。我可以通过执行letters.length来显示整个数组;在getCount或英语字母表中,通过执行字母。length-3;。但我无法根据所选语言交替使用这两种语言。整个数组是什么?丹麦语、瑞典语和德语是三种不同的字母。其他语言添加带有变音符号的字母。要支持all,您必须显示所有unicode字母。这是一个巨大的列表。如果你检查我的代码,具体来说,我解析数组以从a-Z中获取字符,然后手动输入ÆØ以填充数组。我想做的是当Locale设置为english时显示A-Z,如果是丹麦语,则显示A-Å。因此,如果language=danish,我希望整个数组,A-Å,显示在GridView中,它为每个字符生成按钮,如果language=english,则显示A-Z。我真的不知道该怎么解释。补充了我的意思。没有单个/整个阵列。每种语言都是不同的数组,具有不同的长度。总之,我用一个字符数组替换了字符串数组,也称为字符串。我刚刚通读了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;
}