我试图用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。
编辑回答评论中的问题
- 将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);
}
- 是的,你可以使用一个GridLayoutManager或StaggeredGridLayoutManager的RecyclerView来为句子单词布局视图,但这需要创建一个RecyclerView. adapter。但是我认为RecyclerView更适合显示一个垂直的集合句子(例如FlowLayouts)。