Я не знаю, почему вы можете иметь несколько строк без полосы прокрутки, но если это то, что вам нужно, я думаю, что это может быть возможным решением.
Очевидно, что вам понадобится какая-то логика на вашем макете, потому что я не могу думать о представлении, которое даст вам эту услугу, не изменив ее.
Итак, я думаю, что RelativeLayout с 5 TextViews (количество текстовых просмотров зависит от количества строк, которые вы хотите показать).
Таким образом, каждый TextView будет содержать одну из ваших линий, так что, когда пользователь добавляет новую строку вам придется сделать что-то вдоль этих линий:
if(linesInView == 5)
shiftText();
addText();
, так что shiftText()
будет отвечать прохождение цикла и установка текста одного текстового файла в другое (смещение их), чтобы освободить место для нового текста.
Тогда addText()
просто добавит новый текст, созданный пользователем, в свободную точку, созданную с помощью shiftText()
.
В целом вы можете следовать этим рекомендациям. Имейте в виду, что я только что написал этот код из головы, у меня нет средств для проверки его правильности на данный момент. Кроме того, это первая попытка, есть место для совершенствования:
private static int MAX_NUM_LINES = 5;
private int linesShown = 0;
private ArrayList<TextView> views = new ArrayList<>();
private EditText userInput;
public void onCreate(...){
....
views.add((TextView)findViewById(R.id.firstline);
views.add((TextView)findViewById(R.id.secondline);
views.add((TextView)findViewById(R.id.thirdline);
views.add((TextView)findViewById(R.id.fourthline);
views.add((TextView)findViewById(R.id.fifthline);
this.userInput = (EditText) findViewById(R.id.input);
//I suggest these in order to avoid calling "findViewById()" everytime the user
// adds a new sentences, which I gather will happen often
}
public void someEventCalledWhenUserAddsNewLine(View view){
if(this.linesShown>=MAX_NUM_LINES)
shiftText();
addNewLine();
}
private void shiftText(){
//Shift your text by looping through your this.views
for(pos=0; pos<this.views.size()-1; ++pos){
String nextLine = this.views.get(pos+1).getText();
this.views.get(pos).setText(nextLine);
}
//You need to set the condition to this.views.size()-1 because
//when you reach position 4 (your last TextView) you have to sop
// since there is not text to shift to that one
this.views.get(this.views.size()-1).setText(null);
//Make sure you set the text of the last TextView to null so that
// addLine() will be able to find the first available TextView
}
private void addNewLine(){
//Add text from this.userInput to the first available TextView in this.views
int pos;
for(pos=0; pos<this.views.size(); ++pos){
if(this.views.get(pos).getText()==null){
//We have found the first available TextView
break;
}
}
this.views.get(pos).setText(this.userInput.getText());
//Pos holds the position of the first available TextView, now we have
// added the new line
this.linesShown++;
}
Начало улучшения летучей мыши будет просто следить за индексом первого доступного TextView так что вам не придется возиться с петлей в addLine()
ищет его.
любезно объясняет, почему downvoted. – Riskhan
Я думаю, что это могло быть потому, что объяснение недостаточно ясное. Я для одного все еще не могу определить, что вам нужно. Вы можете немного перефразировать его. – Chayemor
@Joy Пожалуйста, просмотрите отредактированный вопрос. – Riskhan