使用animateLayoutChanges调整EditText的大小时,光标处于错误的位置

时间:2016-05-14 07:20:37

标签: java android android-edittext

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

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

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

我试图通过以下方式解决这个问题:

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

如果有人知道我如何可能刷新视图以便更新文本位置或以其他方式禁用此视图上的动画,同时保留所有其他非常棒的内容!

谢谢!

1 个答案:

答案 0 :(得分:0)

毕竟我最终找到了解决方案..!这是针对那些可能处于类似情况的人。我将animateLayoutChanges设置为false并自定义动画其他过渡 - 在我的情况下,EditText旁边的TextViews出现并在更改大小时消失。我必须使用.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?
            }
        });

让它变得不可见(在这种情况下为GONE):

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

根据默认情况,这会动画视图的淡入淡出,但视图的任何移动都是离散的,因此EditText光标保持在正确的位置!