在关闭它之前让一个 android 对话框滚动到最后

Posted

技术标签:

【中文标题】在关闭它之前让一个 android 对话框滚动到最后【英文标题】:Making an android dialog scroll till the end before dismissing it 【发布时间】:2017-06-22 06:50:06 【问题描述】:

我有一个 android 警报对话框,我会在第一次使用时向用户显示。现在这个警告对话框中的文本很大,所以滚动是必要的。

我想让对话框在用户按下确定按钮时自动滚动直到他到达文本的末尾

如何以编程方式解决这个问题?

预期行为的伪代码:

alert.setPositiveButton("Let's Get Started!!",new DialogInterface.OnClickListener() 
    @Override
    public void onClick(DialogInterface dialog, int which) 
       if(scrolled_till_end)
           dismissDialogue();
       else
           scrollFurther();   // scroll_further to next unviewed part of dialog
    
);

【问题讨论】:

【参考方案1】:
    首先您应该在对话框中添加一个 ScrollView。 因为对话框的原生按钮总是会关闭你不想要的对话框,所以你也需要自己添加按钮。 当用户点击你添加的按钮时,你可以查看ScrollView的scrollY,如果没有触到底部你可以使用ScrollView#smoothScrollTo()滚动到底部。

就是这样。

编辑 #1 在 onClickListener 中可能类似于:

int textTotalHeight = textView.getHeight();
int pageHeight = scrollView.getHeight();
int scrollY = scrollView.getScrollY();
if(scrollY < textTotalHeight - pageHeight) // not touch the bottom
    scrollView.smoothScrollTo(0, scrollY + pageHeight);// scroll one page height
 else // touch the bottom, dismiss the dialog
    dialog.dismiss();

【讨论】:

请为此提供代码......此外,我想滚动到下一个未查看的部分,而不是直接滚动到底部......就像在许可协议中一样 感谢@AssIstne。我已经完成了第一部分。我不得不修改此代码以采用相对布局而不是 textview,因为我的对话框具有多个 textview 的布局。此外,对话框被创建并显示之后,我们需要通过直接引用按钮来覆盖 onclicklistener 行为以最终使其工作,就像在answer 中一样埃里克。不过感谢核心逻辑:)【参考方案2】:

您可以通过两种方式完成这项工作:

1:禁用提交按钮并强制用户滚动滚动条以启用它...然后在用户滚动到目标滚动条的末尾后启用提交按钮并允许用户使用该按钮。

2:您自己应该以编程方式滚动滚动条到它的末尾,然后完成对话框,您可以使用 scrollbar.smoothScrollTo(x,y) 方法滚动滚动条。像这样:

private void scrollFurther()

     ScrollView sv= (ScrollView) findViewById(R.id.scv_main);
     sv.smoothScrollTo(sv.getBottom());
     dismissDialogue();

【讨论】:

第二个选项将是我正在寻找的那个......但是我将如何跟踪上述 scrolled_till_end 标志? 我想你可以在这个链接中找到你的答案:***.com/a/10334353/3137633

以上是关于在关闭它之前让一个 android 对话框滚动到最后的主要内容,如果未能解决你的问题,请参考以下文章

js-让页面滚动最底部,显示到最底部

让DIV的滚动条自动滚动到最底部 - 3种方法

Listview 自动滚动到最下边

Android 如何在阅读列表项计数时停止包含页脚行的 TalkBack

以编程方式设置 ViewPager 高度会自动滚动到最底部

wps表格中,让滚动条滚动条滚动到最右面时刚刚好是数据最后呢。复制换新表格就算了。有啥方法