Java 如何使android:lineSpacingMultiplier在EditText和TextView中的行为相同
我倾向于创建Java 如何使android:lineSpacingMultiplier在EditText和TextView中的行为相同,java,android,android-edittext,Java,Android,Android Edittext,我倾向于创建TextView和EditText,它们在视觉上看起来完全相同 我将编辑文本与文本视图叠加,以便比较它们的相同内容。我使TextView具有红色文本 到目前为止,这就是他们的样子 EditText和TextView在没有android:lineSpacingMultiplier的情况下看起来完全相同 这是正在使用的XML <FrameLayout android:layout_width="match_parent" android:layout_height
TextView
和EditText
,它们在视觉上看起来完全相同
我将编辑文本
与文本视图
叠加,以便比较它们的相同内容。我使TextView
具有红色文本
到目前为止,这就是他们的样子
EditText
和TextView
在没有android:lineSpacingMultiplier的情况下看起来完全相同
这是正在使用的XML
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/body_text_view"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:textSize="24sp"
android:singleLine="false"
android:textColor="#ff0000" />
<EditText
android:id="@+id/body_edit_text"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:scrollbars="vertical"
android:textSize="24sp"
android:singleLine="false"
android:inputType="textMultiLine|textCapSentences" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/body_text_view"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:textSize="24sp"
android:singleLine="false"
android:textColor="#ff0000"
android:lineSpacingMultiplier="2.4" />
<EditText
android:id="@+id/body_edit_text"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:scrollbars="vertical"
android:textSize="24sp"
android:singleLine="false"
android:inputType="textMultiLine|textCapSentences"
android:lineSpacingMultiplier="2.4" />
</FrameLayout>
我可以知道,如何使android:lineSpacingMultiplier对EditText
和TextView
的行为相同,以便EditText
和TextView
在视觉上看起来相同吗
p/s
请不要建议使用EditText
代替TextView
。他们不一样!您可以通过各种方法尝试使EditText
的行为类似于TextView
。(Stackoverflow在解决方案上有很多建议。没有一个能完美地工作)在一天结束时,它不起作用 不要使用lineSpacingMultiplier
,而是使用lineSpacingExtra
并简单地用要在代码中应用的乘法器计算
我能够在我的机器上复制您的问题,实际上lineSpacingMultiplier
产生了与您所面临的问题相同的问题,并且找不到任何解决方案/原因来解释为什么会发生这种情况(甚至在Android文档上也没有)
但是,当我将其更改为相同的lineSpacingExtra
,例如:lineSpacingExtra=20dp
,它们完全对齐。
因此,基本上,您可以为EditText
和TextView
计算所需的间距,并通过如下代码应用该值:
float calculatedValue = 50.0f;
editText.setLineSpacing(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, calculatedValue, getResources().getDisplayMetrics()), 1.0f);
textView.setLineSpacing(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, calculatedValue, getResources().getDisplayMetrics()), 1.0f);
这种方法对我很有效,即使在我使用calculatedValue
时,两个元素的文本总是完美对齐。
这是我最后使用的xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/body_text_view"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:textSize="24sp"
android:singleLine="false"
android:textColor="#ff0000"
android:lineSpacingExtra="0dp"/>
<EditText
android:id="@+id/body_edit_text"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:scrollbars="vertical"
android:textSize="24sp"
android:singleLine="false"
android:inputType="textMultiLine|textCapSentences"
android:lineSpacingExtra="0dp"/>
</FrameLayout>
在EditText
和TextView
上行距均设置为50的图像:
不要使用lineSpacingMultiplier
,使用lineSpacingExtra
,只需c计算要在代码中应用的乘法器
我能够在我的机器上复制您的问题,实际上lineSpacingMultiplier
产生了与您所面临的问题相同的问题,并且找不到任何解决方案/原因来解释为什么会发生这种情况(甚至在Android文档上也没有)
但是,当我将其更改为相同的lineSpacingExtra
,例如:lineSpacingExtra=20dp
,它们完全对齐。
因此,基本上,您可以为EditText
和TextView
计算所需的间距,并通过如下代码应用该值:
float calculatedValue = 50.0f;
editText.setLineSpacing(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, calculatedValue, getResources().getDisplayMetrics()), 1.0f);
textView.setLineSpacing(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, calculatedValue, getResources().getDisplayMetrics()), 1.0f);
这种方法对我很有效,即使在我使用calculatedValue
时,两个元素的文本总是完美对齐。
这是我最后使用的xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/body_text_view"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:textSize="24sp"
android:singleLine="false"
android:textColor="#ff0000"
android:lineSpacingExtra="0dp"/>
<EditText
android:id="@+id/body_edit_text"
android:gravity="top"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:scrollbars="vertical"
android:textSize="24sp"
android:singleLine="false"
android:inputType="textMultiLine|textCapSentences"
android:lineSpacingExtra="0dp"/>
</FrameLayout>
在EditText
和TextView
上行距均设置为50的图像:
lineSpacingExtra和2dp对我来说很好,但我想知道乘法器的作用是什么`
`
第二种方式非android:lineSpacingMultiplier=“”使用LineSpacingExtra代替种子lineSpacingMultiplier
android:lineSpacingExtra=“1.5dp”
lineSpacingExtra和2dp对我来说很好,但我想知道乘法器的作用是什么`
`
第二种方式非android:lineSpacingMultiplier=“”使用LineSpacingExtra代替种子lineSpacingMultiplier
android:lineSpacingExtra=“1.5dp”
奇怪的是
android:inputType="textMultiLine"
或
对于文本视图来说,似乎解决了这个问题
这并不能使textview真正可编辑,事实上也没有意义,但它改变了lineSpacingMultiplier
属性的效果
android:inputType="textMultiLine"
或
对于文本视图来说,似乎解决了这个问题
这并不能使textview真正可编辑,事实上也没有意义,但它改变了lineSpacingMultiplier
属性的效果。EditText
是textview
的一个扩展(子类),然而,这两种方法在这里的行为不同,这当然是,因为它们的属性不相似(从xml设置或默认情况下不相似)。因此,要将它们完美地对齐,唯一的方法是查找可能导致问题的不相似属性,并使它们的行为相似。
考虑到“我可以知道,如何使android:lineSpacingMultiplier对EditText和TextView的行为相同,以便EditText和TextView在视觉上看起来相同吗?”是您主要关心的问题,
通过更改TextView
的以下属性,我可以将它们完美地对齐
android:可编辑
如果设置,则指定此TextView具有输入方法。除非另有规定,否则将采用文本形式。对于TextView,默认情况下这是false。对于EditText,默认情况下为true
此属性已被弃用,但可以替换为
android:inputType
放置在文本字段中的数据类型,用于帮助输入法决定如何允许用户输入文本。此处的常量与InputType定义的常量相对应。不过,通常可以选择单个值
android:breakStrategy="simple"
android:textIsSelectable="true"