【问题标题】:How to disable floating label animation when populating EditText Fields wrapped in TextInputLayout填充 TextInputLayout 中包装的 EditText 字段时如何禁用浮动标签动画
【发布时间】:2015-11-14 09:52:58
【问题描述】:

我希望在预填充 EditText 字段时能够使浮动标签就位。当视图加载时,提示仍然显示在文本后面,然后再动画到浮动标签。支持库的 TextInputLayout 中似乎没有这种方法。有什么想法吗?

【问题讨论】:

    标签: android android-support-library android-design-library android-textinputlayout androiddesignsupport


    【解决方案1】:

    借助支持设计库v23,您可以使用:

    til.setHintAnimationEnabled(false);
    

    您可以在这里找到javadoc

    【讨论】:

    • 请注意,在我们设置文本/提示之前需要关闭动画。顺序错误不会关闭动画。
    • 工作。确保在 TextInputEditText 而不是 TextINputLayout 上调用该方法。设置字段后播放动画,然后再次启用动画。 :-((
    • @Sevastyan 在清除该字段之前,您实际上并不需要动画。添加文本更改侦听器并在字段的字符数达到 0 时重新启用动画。
    【解决方案2】:

    基于 Gabriels 的回答我写了一个小方法在加载视图层次结构后运行,该方法在初始显示时禁用动画,但在病房后启用它。将此添加到您的基本活动/片段/视图中,它将解决它的问题。

    private void setTextInputLayoutAnimation(View view) {
            if (view instanceof TextInputLayout) {
                TextInputLayout til = (TextInputLayout) view;
                til.setHintAnimationEnabled(false);
                til.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override public boolean onPreDraw() {
                        til.getViewTreeObserver().removeOnPreDrawListener(this);
                        til.setHintAnimationEnabled(true);
                        return false;
                    }
                });
                return;
            }
    
            if (view instanceof ViewGroup) {
                ViewGroup group = (ViewGroup) view;
                for (int i = 0; i < group.getChildCount(); i++) {
                    View child = group.getChildAt(i);
                    setTextInputLayoutAnimation(child);
                }
            }
        }
    

    【讨论】:

      【解决方案3】:

      我使用下面的代码得到了解决方案,我尝试使用 xml 但工作时间不长,您可以尝试以编程方式为 TextInputLayoutTextInputEditText

      设置提示
          TextInputLayout hintView = (TextInputLayout) findViewById(R.id.activity_login_inputlayout_password);
          hintView.setHintAnimationEnabled(false);
          hintView.setHint("");
          yourEditTextPassword.setHint(getString(R.string.text_password_hint));
      

      【讨论】:

        猜你喜欢
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-15
        • 2015-08-13
        • 2015-10-14
        • 1970-01-01
        相关资源
        最近更新 更多