Я использую AlertDialog для отслеживания файла журнала, который обновляется в режиме реального времени, и мне нужно автоматически прокручивать страницу вниз при каждом добавлении дополнительной строки.
Я могу привести AlertDialog
к TextView
(и, например, с помощью этого TextView изменить размер текста), но любые методы, включающие прокрутку, не работают.
Код:
LogFileView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
String logFile = "/data/data/com.test/test.log";
String logFileOutput = getFileOutput(logFile);
final AlertDialog dialog = new AlertDialog.Builder(getActivity()).setMessage(logFileOutput).show();
TextView textView = dialog.findViewById(android.R.id.message);
textView.setTextSize(8);
textView.scrollTo(0, textView.getLineCount());
} catch (IOException e) {
e.printStackTrace();
}
}
});
textView.setTextSize(8);
изменит размер текста на дисплее
textView.scrollTo(0, textView.getLineCount());
ничего не сделает, и диалоговое окно с предупреждением, несмотря на наличие полосы прокрутки, останется сфокусированным на первой строке
Обновление 1:
Я вижу, что в выводе консоли есть несколько запросов на код / ошибки создания диалогов.
Во-первых, я не использую отдельный макет / класс для создания диалога. Он применяет макет по умолчанию, связанный с (android.R.id.message
), к экземпляру android.app.AlertDialog
и создается только в методе onClick для onClickListener в приведенном выше коде.
Исходя из полученных мной отзывов, код, который я недавно пытался использовать, выглядит следующим образом:
LogFileView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
String logFile = "/data/data/com.test/test.log";
String logFileOutput = getFileOutput(logFile);
final AlertDialog dialog = new AlertDialog.Builder(getActivity()).setMessage(logFileOutput).show();
TextView textView = dialog.findViewById(android.R.id.message);
textView.setTextSize(8);
//textView.scrollTo(0, textView.getLineCount());
textView.setMovementMethod(new ScrollingMovementMethod());
textView.post(new Runnable() {
@Override
public void run() {
textView.scrollTo(0, textView.getLineCount());
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
Во-вторых, при попытке прокрутки в консоли ничего не появляется - это просто игнорируется во время выполнения.
Компоновка по умолчанию казалась бы подходящей для моих целей, учитывая, что она выглядит как пустой TextView с прикрепленной полосой прокрутки, но я думаю, что следующим разумным шагом может быть использование нового пользовательского макета и добавление ScrollView и просмотр что происходит