在axml文件中添加 View 时,可以简单地指定 View 属性的大小和单位,例如:
<TextView
android:TextSize = "10sp"
android:layout_marginTop = "10dp" />
如 this answer 中所述, 有特定用途的特定单位。
我的主要问题是,当以动态方式以编程方式(通过代码)应用尺寸时,应用尺寸的单位是什么?
例如,当像这样声明一个 TextSize 时:
TextView tv = new TextView();
tv.TextSize = 10;
文字大小的单位是什么? sp? DP?像素?
最重要的是,我如何更改它们以满足我的需要?
最佳答案
嗨@Daniel,如果你以编程方式生成 TextView 如下代码
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).
By default Android uses "sp" for text size and "px" for view size.
对于其他 View 尺寸,我们可以设置 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 下降,但我们无法分配给自定义单位进行查看,所以这就是我这样使用它的原因。
我希望我解释得很好。
关于java - 以编程方式声明 View 时应用什么单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54553108/