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

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

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

我想要的是这样的:

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

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


当前回答

所有解决方案都建议您通过代码使用预定义的浮点值。

但如果你想知道如何在XML中引用预定义的浮动值(例如布局),那么下面是我所做的一个例子,它工作得很完美:

定义资源值为type="integer"但format="float",例如:

<item name="windowWeightSum" type="integer" format="float">6.0</item>
<item name="windowNavPaneSum" type="integer" format="float">1.5</item>
<item name="windowContentPaneSum" type="integer" format="float">4.5</item>

然后在你的布局中使用@integer/name_of_resource,例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="@integer/windowWeightSum"                 // float 6.0
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="@integer/windowNavPaneSum"        // float 1.5
        android:orientation="vertical">
        <!-- other views -->
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="@integer/windowContentPaneSum"    // float 4.5
        android:orientation="vertical">
        <!-- other views -->
    </LinearLayout>

</LinearLayout>

其他回答

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

就像这样

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

小数点后2位

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

所以是3.56f

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

我找到了一个解决方案,这是有效的,但在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"/>

float或double形参可以存储为字符串:

<resources>
    <string name="x">0.01</string>
</resources>

然后得到:

double value = Double.parseDouble(this.getString(R.string.x));

如果你想把x解析为浮点数,请使用java.lang.Float.parseFloat()。

在dimensions .xml中添加一个浮点数:

<项目格式=“浮点数” 名称=“my_dimen” 类型=“dimen”>1.2</item>

从XML引用:

<EditText 
    android:lineSpacingMultiplier="@dimen/my_dimen"
    ...

要以编程方式读取这个值,可以使用ResourcesCompat。getFloat从androidx.core

Gradle依赖性:

实现(“androidx.core:核心:$ {version}”)

用法:

import androidx.core.content.res.ResourcesCompat;

...

float value = ResourcesCompat.getFloat(context.getResources(), R.dimen.my_dimen);

所有解决方案都建议您通过代码使用预定义的浮点值。

但如果你想知道如何在XML中引用预定义的浮动值(例如布局),那么下面是我所做的一个例子,它工作得很完美:

定义资源值为type="integer"但format="float",例如:

<item name="windowWeightSum" type="integer" format="float">6.0</item>
<item name="windowNavPaneSum" type="integer" format="float">1.5</item>
<item name="windowContentPaneSum" type="integer" format="float">4.5</item>

然后在你的布局中使用@integer/name_of_resource,例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="@integer/windowWeightSum"                 // float 6.0
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="@integer/windowNavPaneSum"        // float 1.5
        android:orientation="vertical">
        <!-- other views -->
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="@integer/windowContentPaneSum"    // float 4.5
        android:orientation="vertical">
        <!-- other views -->
    </LinearLayout>

</LinearLayout>