我正在尝试使用android:lineSpacingMultiplier
在文本视图之间添加一些空格
来自documentation:
文字行之间的额外间距, 作为乘数。
必须是浮点值,例如 为“1.2”。
由于我在几个不同的TextView中使用它,我想为我的资源添加一个全局维度/值,但我不知道使用哪个标记,如果它甚至存在。 我已经尝试了对我有意义的所有resource types,但它们都没有用。
我想拥有的是这样的:
<resources>
<dimen name="text_line_spacing">1.4</dimen>
</resources>
编辑:我知道android:lineSpacingExtra
(需要带附加单位的维度),但如果可能,我想使用android:lineSpacingMultiplier
。
答案 0 :(得分:473)
有一个解决方案:
<resources>
<item name="text_line_spacing" format="float" type="dimen">1.0</item>
</resources>
这样,您的浮点数将在@dimen下。请注意,您可以使用其他“格式”和/或“类型”修饰符,其中格式代表:
格式=封闭数据类型:
和类型代表:
Type =资源类型(以R.XXXXX.name引用):
要从代码中获取资源,您应该使用以下代码段:
TypedValue outValue = new TypedValue();
getResources().getValue(R.dimen.text_line_spacing, outValue, true);
float value = outValue.getFloat();
我知道这很令人困惑(您希望调用getResources().getDimension(R.dimen.text_line_spacing)
),但Android dimensions
有特殊待遇,纯粹的“浮动”号码无效。
此外,还有一个小的“黑客”将浮动数字放入维度,但是警告这是真正破解,并且您有机会失去浮动范围和精度。
<resources>
<dimen name="text_line_spacing">2.025px</dimen>
</resources>
从代码中,您可以通过
获得浮动float lineSpacing = getResources().getDimension(R.dimen.text_line_spacing);
在这种情况下,lineSpacing
的值为2.024993896484375
,而不是您期望的2.025
。
答案 1 :(得分:74)
如此链接http://droidista.blogspot.in/2012/04/adding-float-value-to-your-resources.html
所述在dimen.xml中声明
<item name="my_float_value" type="dimen" format="float">9.52</item>
从xml引用
@dimen/my_float_value
从java引用
TypedValue typedValue = new TypedValue();
getResources().getValue(R.dimen.my_float_value, typedValue, true);
float myFloatValue = typedValue.getFloat();
答案 2 :(得分:35)
所有解决方案都建议您通过代码使用预定义的浮点值。
但是如果您想知道如何在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>
答案 3 :(得分:17)
我还找到了一种似乎没有任何警告的解决方法:
<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
时才有效答案 4 :(得分:6)
我们也可以将它用作约束布局的指导。
创建integer.xml文件并添加到
<item name="guideline_button_top" type="integer" format="float">0.60</item>
使用layout.xml文件
app:layout_constraintGuide_percent="@integer/guideline_button_top"
答案 5 :(得分:5)
我用一种风格来解决这个问题。官方链接是here。
非常有用的东西。您创建一个文件来保存样式(如“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。通过使用样式,您还可以选择修改视图的各种其他方面。
答案 6 :(得分:2)
如果您有控制范围的简单浮点数,您还可以在资源中使用整数除以代码中需要的小数位数。
这样的事情
<integer name="strokeWidth">356</integer>
用于2位小数
this.strokeWidthFromResources = resources_.getInteger(R.integer.strokeWidth);
circleOptions.strokeWidth((float) strokeWidthFromResources/ 100);
这使得 3.56f
不是说这是最优雅的解决方案,但对于简单的项目,它很方便。
答案 7 :(得分:0)
我找到了一个可行的解决方案,但确实在LogCat中产生Warning
(WARN/Resources(268): Converting to 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"/>
答案 8 :(得分:0)
将浮点数添加到dimens.xml:
<item format="float" name="my_dimen" type="dimen">1.2</item>
要从XML引用:
<EditText
android:lineSpacingMultiplier="@dimen/my_dimen"
...
要以编程方式读取此值,可以使用androidx.core中的ResourcesCompat.getFloat
等级依赖性:
implementation("androidx.core:core:${version}")
用法:
import androidx.core.content.res.ResourcesCompat;
...
float value = ResourcesCompat.getFloat(context.getResources(), R.dimen.my_dimen);
答案 9 :(得分:0)
尽管我过去使用的是公认的答案,但似乎可以使用当前的构建工具来做到:
req=new XMLHttpRequest();
req.open('POST','submit.php'); req.setRequestHeader('Content-type','application/json; charset=UTF-8');
req.onload=function(resp){
if (resp.target.status==200){
do something....
}
}
我正在使用Build Tools主版本29。
答案 10 :(得分:0)
float 或 double 参数可以存储为字符串:
<resources>
<string name="x">0.01</string>
</resources>
然后获得为:
double value = Double.parseDouble(this.getString(R.string.x));
如果要将 x 解析为浮点数,请使用 java.lang.Float.parseFloat()。