我试图添加一个小的行之间的空间到我的TextViews使用android:lineSpacingMultiplier 从文档中可以看到:

文本行与行之间的额外间距, 作为乘数。 必须是浮点值,比如 “1.2”。

因为我使用这在几个不同的TextViews,我想添加一个全局维度/值到我的资源,但我不知道使用哪个标签,如果它甚至存在。 我尝试了所有对我有意义的资源类型,但没有一个有用。

我想要的是这样的:

<resources>
    <dimen name="text_line_spacing">1.4</dimen>
</resources>

编辑:我知道android:lineSpacingExtra(需要一个附加单位的维度),但我想使用android:lineSpacingMultiplier如果可能的话。


当前回答

我还发现了一个没有警告的变通方法:

<resources>
    <item name="the_name" type="dimen">255%</item>
    <item name="another_name" type="dimen">15%</item>
</resources>

然后:

// theName = 2.55f
float theName = getResources().getFraction(R.dimen.the_name, 1, 1);
// anotherName = 0.15f
float anotherName = getResources().getFraction(R.dimen.another_name, 1, 1);

警告:它只在从Java代码中使用dimen而不是从xml中使用dimen时有效

其他回答

我找到了一个解决方案,这是有效的,但在LogCat中会导致警告(WARN/Resources(268):转换为float: TypedValue{t=0x3/d=0x4d "1.2" a=2 r=0x7f06000a})。

<resources>
    <string name="text_line_spacing">1.2</string>
</resources>

<android:lineSpacingMultiplier="@string/text_line_spacing"/>

我还发现了一个没有警告的变通方法:

<resources>
    <item name="the_name" type="dimen">255%</item>
    <item name="another_name" type="dimen">15%</item>
</resources>

然后:

// theName = 2.55f
float theName = getResources().getFraction(R.dimen.the_name, 1, 1);
// anotherName = 0.15f
float anotherName = getResources().getFraction(R.dimen.another_name, 1, 1);

警告:它只在从Java代码中使用dimen而不是从xml中使用dimen时有效

我使用了一种风格来解决这个问题。官方链接在这里。

非常有用的东西。您可以创建一个文件来保存样式(如“styles.xml”),并在其中定义它们。然后在布局中引用样式(如"main.xml")。

下面是一个你想要的样式示例:

<style name="text_line_spacing">
   <item name="android:lineSpacingMultiplier">1.4</item>
</style>

假设你想用这个改变一个简单的TextView。在你的布局文件中,你可以输入:

<TextView
   style="@style/summary_text"
   ...
   android:text="This sentence has 1.4 times more spacing than normal."
/>

试试吧——这基本上就是android上所有内置UI的运作方式。通过使用样式,你也可以选择修改视图的所有其他方面。

如果您有控制范围的简单浮点数,您也可以在资源中使用一个整数,并在代码中直接除以所需的小数点后数位。

就像这样

<integer name="strokeWidth">356</integer>

小数点后2位

this.strokeWidthFromResources = resources_.getInteger(R.integer.strokeWidth);    
circleOptions.strokeWidth((float) strokeWidthFromResources/ 100);

所以是3.56f

并不是说这是最优雅的解决方案,但对于简单的项目来说,它很方便。

我们也可以用它作为约束布局的指导原则。

创建integer.xml文件并添加到

 <item name="guideline_button_top" type="integer" format="float">0.60</item>

从layout.xml文件中使用

 app:layout_constraintGuide_percent="@integer/guideline_button_top"