我有一个布局,其中的EditText由用户填充,然后稍后它被禁用,无法作为标准的TextView。
问题是,省略号永远不会在这个EditText上起作用。我希望当文本太大而无法完全显示时,它会在文本的结尾显示“...”,但我找不到任何方法使它起作用,我不知道为什么它不起作用。
这是我的布局
<RelativeLayout
android:id="@+id/search_container"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/toolbar"
android:background="@drawable/bg_border_bot_clickable"
android:addStatesFromChildren="@+id/ic_edit"
android:animateLayoutChanges="true">
<View
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:layout_alignParentLeft="true"
android:background="@drawable/ic_action_search"
android:id="@+id/ic_search" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:textColorHint="@color/text_hint"
android:hint="@string/search_hint"
android:id="@+id/et_search"
android:textColor="@android:color/white"
android:inputType="text|textCapSentences"
android:ellipsize="end"
android:singleLine="true"
android:lines="1"
android:imeOptions="actionSearch"
android:background="@drawable/transition_rounded_rectangle"
android:layout_toLeftOf="@+id/ic_edit"
android:layout_toRightOf="@+id/ic_search"
/>
<View
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:background="@drawable/ic_edit"
android:id="@+id/ic_edit"
android:visibility="gone"
android:clickable="true"/>
有什么办法能做到吗?
5条答案
按热度按时间lqfhib0f1#
将以下属性添加到
EditText
中,以便用省略号将内容括起来。如果不想在XML中默认将editable设置为false,可以通过调用
setKeyListener(null)
获得相同的结果。dxxyhpgq2#
这是我的解决方案(我已经计算出来了):
XML文件:
java :
2fjabf4q3#
我认为省略号不适用于EditText。解决这个问题的一个方法是在EditText下面有一个带有省略号的TextView。最初将TextView可见性设置为GONE。当你想禁用EditText时,将其可见性设置为GONE,将文本分配给TextView,并将TextView可见性设置为VISIBLE。
tpxzln5u4#
正如您已经使用的:
还有一件事需要添加。从java文件调用
setSeleted(true)
将id
editTextId
赋予您的EditText
;ars1skjm5#
经过大量的测试,包括使用
AppCompatEditText
API,我可以说,@ChristianAbela解决方案无疑是在项目应支持从API 23(Android Marshmallow)开始的Android版本的场景中没有问题的解决方案。在我的例子中,我还应该使字段
EditText
在用户将焦点返回到该字段后立即恢复正常(editText.keyListener != null
)。因此,如果您不能锁定
EditText
,但仍然需要显示省略号,那么下面的代码策略可能会很有用。1-支持等级
首先,我将所有字段状态hackcode构建到一个支持类中:
在上面的代码中,不要被包含前缀或后缀(如 "Procedure" 和 "Location")的属性和变量搞混。
这是因为这些标签指向我应用代码的问题域。
屏幕上有两个字段,"搜索程序" 和 "搜索位置"。
一旦用户从一个或两个字段中移去焦点,如果字段的内容比字段本身长,则省略号应该出现在可视组件的末尾。
2-黑客代码示例声明
在客户机类中,我在类作用域而不是函数作用域中惰性地添加了声明(但是您可以根据需要继续操作):
3-在
OnFocusChangeListener
上执行因此,有必要在我已经创建的
OnFocusChangeListener
生成器方法中添加FieldDataStatusHolder
示例的逻辑执行:此方法用于初始化字段上的侦听器,如下所示:
4-XML中的视图
最后,必须将以下属性和值添加到
EditText
中:android:ellipsize="end"
;android:maxLines="1"
.请注意,即使对于Android 23,我也不需要以下属性:
android:singleLine
(已弃用);另一个要点是......我实际上对每个字段使用了以下可视化组件:
TextInputLayout
;TextInputEditText
的数据。而且
TextInputLayout
组件包含一个endIcon
,因此,每次字段失去焦点,以至于出现省略号(Android API 31+)时,我也会隐藏endIcon
。但是,为了避免使答案更加冗长,我在这里不添加这个算法。
是的,这里的代码应该不仅适用于
EditText
,而且适用于它的任何子类。结果
具有焦点的字段:
无焦点的字段: