java - 使用 animateLayoutChanges 调整 EditText 大小时光标位于错误位置

标签 java android android-edittext

我有一个设计,其中有一个输入EditText,其中包含一组输入单元选项(RadioGroup 充满RadioButtons)。当用户选择某个选项时,我实现了 ViewGroup.LayoutParams 将宽度调整为所需的值。

一切正常,但是当我添加 animateLayoutChanges 来改善整体外观时,EditView 中的光标受到负面影响:

  • 用户输入一个值,一切都显示正常(顺便说一句,重力位于 EditText 中)
  • 缩小 View 的选项已选中 - View 动画正确缩小 - 但是 - 条目现在看不见了!隐藏在它应该在的地方。如果您单击该字段或将 RadioButton 选项更改为具有相同大小输入的选项,则该条目将移动到适当的位置...
  • 类似地 - View 很小并且在正确的位置有一个条目,选择了 View 扩展的选项 - 现在 View 扩展并且条目留在 View 的中心而不是移动到正确的位置!当执行有关 EditText 的另一个操作时,它会再次刷新..

我尝试通过以下方式解决此问题:

  • 将输入字符串存储到临时变量中并将其替换为 setText()
  • 在重新添加字符串之前使用 append("") 不添加任何内容
  • 选择后在 EditText 中调用 .requestFocus()
  • 使用 .invalidate() 重绘 View
  • 将光标设置到 View 末尾
  • 尝试自定义设置动画(如果没有成功,我可能必须继续使用这种方法?)

如果有人知道我如何刷新 View ,以便它更新文本位置或以其他方式禁用此 View 上的动画,同时保留所有其他 View ,那就太棒了!

谢谢!

最佳答案

我最终找到了解决方案......!这里是为那些可能处于类似情况的人准备的。我将 animateLayoutChanges 设置为 false 并自定义动画其他过渡 - 在我的例子中,EditText 旁边的 TextView 在大小更改时出现和消失。我必须使用 .animate().alpha(float) 方法,如下所示。

为了变得可见:

textViewFractionIn.setVisibility(View.VISIBLE);
textViewFractionIn.animate()
    .alpha(1.0f)
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            // Has to be blank it seems to override the previous .setListener in the GONE case?
            }
        });

并使其不可见(在本例中消失):

textViewFractionIn.animate()
    .alpha(0.0f)
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            textViewFractionIn.setVisibility(View.GONE);
            }
        });

默认情况下,这会动画显示 View 的淡入淡出,但 View 的任何移动都保持离散,因此 EditText 光标保持在正确的位置!

关于java - 使用 animateLayoutChanges 调整 EditText 大小时光标位于错误位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37223843/

相关文章:

android recyclerview notifyItemInserted动画

android - AlarmManager定时器

android - 使用动态 fragment 加载抽屉导航 slider

android - Android 中使用小动画更改 EditText 的文本

java - ObjectAnimator 断断续续的滚动

java - struts 2 Web应用程序中的OpenId身份验证

java - 在将请求从 servlet 分派(dispatch)到 jsp 后,我们能否以某种方式更改地址栏中的 url

android - Android 中的 EditText 在获得焦点之前不会显示其值

Android:如何更改 API 19 的 EditText 中底线的颜色

java - 带 jetty 的 Spring Websocket 破坏了 mvc 测试