我使用一个AlertDialog来跟踪一个实时更新的logFile,并且需要在添加额外的行时自动滚动到视图的底部。
我可以将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的实例,并且仅在上面代码中的onClickListener的onClick方法中构造。
根据迄今收到的反馈,我最近尝试使用的代码如下所示:
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并看看会发生什么是明智的。
发布于 2019-01-16 07:09:18
使用下面的代码。我进行了测试和验证。
textView.movementMethod = ScrollingMovementMethod() // Add this
textView.text = "your text"
textView.post {
val scrollAmount = textView.layout.getLineTop(textView.lineCount) - textView.height
textView.scrollTo(0, textView.lineCount)
}编辑:相当于java:
textView.setMovementMethod(new ScrollingMovementMethod());
textView.setText("your text");
textView.post(new Runnable() {
@Override
public void run() {
int scrollAmount = textView.getLayout().getLineTop(textView.getLineCount()) - textView.getHeight();
textView.scrollTo(0, scrollAmount);
}
});发布于 2019-01-16 06:19:12
尝试用post包装它,而不是直接调用scrollTo,如下所示:
textView.post(new Runnable() {
@Override
public void run() {
textView.scrollTo(0, textView.getLineCount());
}
});https://stackoverflow.com/questions/54211139
复制相似问题