用Java将第二行TextView分隔成另一个TextView



我试图用Java在Android Studio中创建一个填补空白的游戏,为此我取一个句子,将关键字(由用户填充)从字符串中分离出来,并在水平LinearLayout(在垂直布局中)添加如下字符串:

TextView前关键字+ TextView关键字+ TextView后关键字

在不同的LinearLayout下面我有以下TextView (textviewline3)使第二行与上面的水平LinearLayout相同的宽度。——比如第2行

由于关键字后的TextView太长,并且在"TextView关键字"之后开始第二行,我想把关键字"后的"TextView的第二行并将其移动到" textviewline3 "

问题是它一直说只有1行和"TextView后的关键字"显示两个

我这样定义它们:

private TextView firstSentence, secondSentence, thirdSentence;
public TextView answerText;
private String sentence = "I do not like anyone in this world of idiots";
private boolean newLineBoolean = true;
private String keyword = "like";
private String[] sentenceDivision;
private String displayForKeyword = "";
private String thirdLine = "";

this in onCreate

answerText = findViewById(R.id.answerPlace);
firstSentence = findViewById(R.id.firstSentence);
secondSentence = findViewById(R.id.secondSentence);
thirdSentence = findViewById(R.id.thirdSentence);

sentenceDivision = sentence.split(keyword);
firstSentence.setText(sentenceDivision[0]);
secondSentence.setText(sentenceDivision[1]);

for(int i = 0; i<keyword.length();i++)
{
displayForKeyword = displayForKeyword + "   ";
}
answerText.setText(displayForKeyword);
checkNumberOfLines();

这个方法

private void checkNumberOfLines(){
String firstWords = sentenceDivision[1].substring(0, sentenceDivision[1].lastIndexOf(" "));
String lastWord = sentenceDivision[1].substring(sentenceDivision[1].lastIndexOf(" ") + 1);
sentenceDivision[1] = firstWords;
thirdLine = lastWord + " " + thirdLine;
secondSentence.setText(sentenceDivision[1]);
thirdSentence.setText(thirdLine);
secondSentence.post(new Runnable() {
@Override
public void run() {
int lineCount = secondSentence.getLineCount();
if (lineCount > 0) {
checkNumberOfLines();
}
else{ newLineBoolean = false;
}
}
});
}

但是它显示如下:

输入图片描述

有人知道为什么吗?提前感谢!

这可能是因为TextView.getLineCount()的定义

public int getLineCount() {
return mLayout != null ? mLayout.getLineCount() : 0;
}

如果mLayout是一个BoringLayout,那么getLineCount()总是返回1。要使用一种不同的文本布局(DynamicLayout),实际计算其行数,你可以尝试通过调用setTextIsSelectable或设置一个Spannable代替CharSequence在TextView(见makeSingleLayout)。

我同意你的句子,这不是你的用例的最佳解决方案,你可能会得到更少的麻烦,通过使用像FlowLayout而不是LinearLayouts和放置每个单词在一个单独的TextView。


编辑回答评论中的问题

  1. 将FlowLayout添加到activity的layout xml后,您可以动态地为句子中的单词创建TextViews:
// in onCreate()
FlowLayout flowLayout = findViewById(R.id.flow_id);
String[] words = sentence.split(" ");
TextView wordText;
for (int i = 0; i < words.length; i++) {
String word = words[i];
//if an edit text is needed for user input
if (i == keywordIndex) {
wordText = new EditText(this);
wordText.setHint("____"); 
} else {
wordText = new TextView(this);           
wordText.setText(word);
}
wordText.setTextColor(getResources()
.getColor(R.color.your_color));
wordText.setBackgroundColor(getResources()
.getColor(android.R.color.white));
flowLayout.add(wordText);
}
  1. 是的,你可以使用一个GridLayoutManager或StaggeredGridLayoutManager的RecyclerView来为句子单词布局视图,但这需要创建一个RecyclerView. adapter。但是我认为RecyclerView更适合显示一个垂直的集合句子(例如FlowLayouts)。

相关内容

  • 没有找到相关文章

最新更新