强制每个单词的换行符

时间:2016-02-09 16:35:51

标签: java android android-layout newline android-relativelayout

我有“strings”=表示放在数组中的字符的单词,名为“bWord”,将字符放在按钮中,问题是空格“”被认为是一个字符,也放在一个按钮中。我不是字符串“”来创建一个断行而不是调用bWord

像Book Cover这样的词会显示如下: [B] [O] [O] [K] [] [C] [O] [V] [E] [R]

我希望它看起来像

[B] [O] [O] [K]

[C] [O] [V] [E] [R]

这是当前问题的图片:

here

我被告知要创建一个新的布局,但我不知道如何去做这个

这是我正在使用的代码

        // draw word buttons

    RelativeLayout wordLayout = (RelativeLayout) findViewById(R.id.wordlayout);
    String[] word = ld.getLevelSpecific().getProcessedWord();

    for (int i = 0; i < word.length; i++) {
        Button temp = new Button(this);
        temp.setText("");
        temp.setTypeface(null, Typeface.BOLD);
        temp.setTextSize(TypedValue.COMPLEX_UNIT_SP, isd.getWordTextSize());
        temp.setIncludeFontPadding(false);
        temp.setId(idCount * 2 + i); 
        temp.setTag(Integer.valueOf(i));
        temp.setBackgroundResource(R.drawable.button_shape_letter);
        RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
                (int) (isd.getWordButtonSize() * orm.getScaleRatio()-2),
(int) (isd.getWordButtonSize() * orm.getScaleRatio()+6*orm.getScaleRatio()));

        if (i > 0) {
            p.addRule(RelativeLayout.RIGHT_OF, idCount * 2 + i - 1);
        } else {
            p.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            p.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        }


        p.setMargins(isd.getExtraspaceWord()+1, isd.getExtraspaceWord(),
                isd.getExtraspaceWord()+1, isd.getExtraspaceWord());
        temp.setLayoutParams(p);
        bWord[i] = temp;
        temp.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                onWordPressed((Integer) v.getTag());

            }
        });
        wordLayout.addView(temp);
    }

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题。

你提到了“书籍封面”这个词,但你的截图显示了“比尔克林顿”......

我做了一个修复显示:

[B] [I] [L] [L]

[C] [L] [I] [N] [T] [O] [N]

而不是:

[B] [I] [L] [L] [] [C] [L] [I] [N] [T] [O] [N]

如何解决:

选项1:

您可以用两个LinearLayouts替换RelativeLayout。例如,Line1和Line2。

然后,在运行时,您调用:

LinearLayout Line1 = (LinearLayout) findViewById(R.id.line1);
LinearLayout Line2 = (LinearLayout) findViewById(R.id.line2);
...
if(word[i].equals(" "))
    insertingInFirstLine = false;
...
if(insertingInFirstLine)
    Line1.addView(newButton);
else 
    Line2.addView(newButton);

好的一点是,您不必担心视图ID。只需创建水平方向的线性布局,然后将它们放在另一个下方。

当单词只有一行时,您可以将Line2可见性设置为“View.GONE”

选项2:

如果你真的需要使用相对布局,我更新了你的“FOR”循环。这样,在空格char(“”)之后,所有新视图将添加到第一行下方。 以下是示例:

int lineDivider = 1000;
for (int i = 0; i < word.length; i++) {
    if(word[i].equalsIgnoreCase(" ")) {
        lineDivider = i;
    } else {
        Button temp = new Button(this);
        ...
        RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(                        
                    (int) (isd.getWordButtonSize() * orm.getScaleRatio()-2), 
                    (int) (isd.getWordButtonSize() * orm.getScaleRatio()+6*orm.getScaleRatio()));

        if (i > 0) {
            if(i < lineDivider) {
                // First Line Items
                p.addRule(RelativeLayout.RIGHT_OF, idCount * 2 + i - 1);
            } else if (i == lineDivider + 1) {
                // First Item of Second Line
                p.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                p.addRule(RelativeLayout.BELOW, idCount * 2);
            } else {
                // Second Line Items
                p.addRule(RelativeLayout.BELOW,  idCount * 2);
                p.addRule(RelativeLayout.RIGHT_OF, idCount * 2 + i - 1);
            }
        } else {
            // First ITEM
            p.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            p.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        }
        ....
    }
}