我有一个设计,其中有一个输入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/