android – TextInputLayout标签,位于EditText的左侧drawable之上

android – TextInputLayout标签,位于EditText的左侧drawable之上,第1张

概述当用户在EditText中聚焦或键入时,是否可以使TextInputLayout标签垂直显示在EditText的左侧drawable上方. 这是EditText的xml: <android.support.design.widget.TextInputLayout android:id="@+id/completion_date_layout2" 当用户在EditText中聚焦或键入时,是否可以使TextinputLayout标签垂直显示在EditText的左侧drawable上方.

这是EditText的xml:

<androID.support.design.Widget.TextinputLayout                androID:ID="@+ID/completion_date_layout2"                androID:layout_wIDth="match_parent"                androID:layout_height="wrap_content"                androID:layout_marginleft="5dp"                androID:layout_marginRight="5dp"                androID:layout_weight="1"                androID:orIEntation="horizontal">                <EditText                    androID:ID="@+ID/etTaskDate"                    androID:layout_wIDth="match_parent"                    androID:layout_height="match_parent"                    androID:hint="@string/Title_completion_date"                    androID:inputType="text"                    androID:drawableleft="@drawable/ic_date"                    androID:paddingBottom="15dp"                    androID:drawablepadding="5dp"                    androID:textSize="@dimen/fIElds_text_size"/>            </androID.support.design.Widget.TextinputLayout>

这是所需的输出:

@L_502_0@

这是我得到的输出:

解决方法 感谢Java的成员访问模型和谷歌的开发人员留下了一个小漏洞,可以通过一个简单的子类来实现,它重复了最少的原始代码:
package androID.support.design.Widget;import androID.content.Context;import androID.graphics.Rect;import androID.util.AttributeSet;public final class TextinputLayoutEx extends TextinputLayout {    private final int mDefaultpadding = __4DP__;    private final Rect mTmpRect = new Rect();    public TextinputLayoutEx(Context context,AttributeSet attrs) {        super(context,attrs);    }    @OverrIDe    protected voID onLayout(boolean changed,int left,int top,int right,int bottom) {        super.onLayout(changed,left,top,right,bottom);        if (isHintEnabled() && mEditText != null) {            final Rect rect = mTmpRect;            VIEwGroupUtils.getDescendantRect(this,mEditText,rect);            mCollapsingTextHelper.setCollapsedBounds(                rect.left + mDefaultpadding,getpaddingtop(),rect.right - mDefaultpadding,bottom - top - getpaddingBottom());            mCollapsingTextHelper.recalculate();        }    }}

在这里,我们将一个新类放到同一个包中,该类打开对包含级别可见性的mCollapsingTextHelper的访问,然后从管理字段名称定位的原始onLayout方法重复部分代码. __4DP__值是4dp值转换为像素,我很确定每个人都有一个实用方法.

在你的xml布局中,只需从androID.support.design.Widget.TextinputLayout切换到androID.support.design.Widget.TextinputLayoutEx,这样你的布局如下所示:

<androID.support.design.Widget.TextinputLayoutEx    androID:layout_wIDth="match_parent"    androID:layout_height="wrap_content"    androID:hint="Mobile">    <androID.support.design.Widget.TextinputEditText        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:drawableleft="@drawable/ic_phone_black_24dp"        androID:drawablepadding="4dp"/></androID.support.design.Widget.TextinputLayoutEx>

结果是

目前它适用于com.androID.support:design:25.3.1

总结

以上是内存溢出为你收集整理的android – TextInputLayout标签,位于EditText的左侧drawable之上全部内容,希望文章能够帮你解决android – TextInputLayout标签,位于EditText的左侧drawable之上所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1136199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存