java - 以编程方式声明视图时应用了哪些单位?
问题描述
在 axml 文件中添加视图时,可以简单地指定视图属性的大小和单位,例如:
<TextView
android:TextSize = "10sp"
android:layout_marginTop = "10dp" />
正如这个答案中所说,有特定目的的特定单位。
我的主要问题是,当以动态方式以编程方式(通过代码)应用大小时,适用于大小的单位是什么?
例如,当像这样声明 TextSize 时:
TextView tv = new TextView();
tv.TextSize = 10;
文本大小的单位是什么?sp? DP?像素?
最重要的是,我怎样才能改变它们以满足我的需要?
解决方案
嗨@Daniel,如果你以编程方式生成文本视图如下代码
TextView tv = new TextView();
tv.setTextSize(10); // Sets text in sp (Scaled Pixel).
如果你想用其他单位设置文本大小,你可以通过以下方式实现。
TextView tv = new TextView();
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, 10); // Sets text in px (Pixel).
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); // Sets text in dip (Device Independent Pixels).
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10); // Sets text in sp (Scaled Pixel).
tv.setTextSize(TypedValue.COMPLEX_UNIT_PT, 10); // Sets text in pt (Points).
tv.setTextSize(TypedValue.COMPLEX_UNIT_IN, 10); // Sets text in in (inches).
tv.setTextSize(TypedValue.COMPLEX_UNIT_MM, 10); // Sets text in mm (millimeters).
默认情况下,Android 使用“sp”作为文本大小,使用“px”作为视图大小。
对于其他视图尺寸,我们可以设置为 px(像素),但如果您想自定义单位,您可以使用自定义方法
/**
* Converts dip to px.
*
* @param context - Context of calling class.
* @param dip - Value in dip to convert.
* @return - Converted px value.
*/
public static int convertDipToPixels(Context context, int dip) {
if (context == null)
return 0;
Resources resources = context.getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, resources.getDisplayMetrics());
return (int) px;
}
通过上述方法,您可以将 YOUR_DESIRED_UNIT 转换为像素,然后设置为查看。你可以更换
TypedValue.COMPLEX_UNIT_DIP
根据您的用例使用上述单位。您也可以反之亦然,让 px 下降,但我们不能分配给自定义单位来查看,所以这就是我这样使用它的原因。
我希望我解释得很好。
推荐阅读
- php - 如何在一个单词的索引之后获得标题的一部分 - wordpress
- javascript - MediaRecorder 'ondataavailable' 事件未触发
- c# - MainWindow 不是启动窗口时的引用实例
- inno-setup - 在 Inno Setup Pascal 脚本中评估运行时来自预处理器的数据集合
- kotlin - 如何在 onStop() 方法中取消 kotlin 协程作业
- tcl - 操作数字符串中有方括号时出现字符串匹配问题
- python - 是否可以在不循环列表的情况下将数组元素范围的值增加一个常量?
- r - 特征误差(Sigma,对称 = TRUE):MetRology uncertMC 中的 0 x 0 矩阵与 2x2 相关矩阵
- flutter - 在 vs 代码中运行原始颤振应用程序并使用 USB 调试时遇到此错误
- java - RestEntity 映射返回空对象