Android 为什么我的文本视图填充的像素不可预测
我扩展了TextView并添加了对边框的支持,问题是当我绘制边框时,我需要在有边框的一侧添加填充,以便文本可以移动 我设置了以像素为单位的边框宽度,它会相应地绘制边框,但在我的TF201平板电脑上,当我在TextView上设置填充时,出于某种原因,它会将填充宽度乘以3倍(以像素为单位),即使该平板电脑说它是以像素为单位明确定义的 编辑:Android 为什么我的文本视图填充的像素不可预测,android,view,textview,Android,View,Textview,我扩展了TextView并添加了对边框的支持,问题是当我绘制边框时,我需要在有边框的一侧添加填充,以便文本可以移动 我设置了以像素为单位的边框宽度,它会相应地绘制边框,但在我的TF201平板电脑上,当我在TextView上设置填充时,出于某种原因,它会将填充宽度乘以3倍(以像素为单位),即使该平板电脑说它是以像素为单位明确定义的 编辑: 尽管我选择的答案不是导致我的问题的原因,但它是一个有效的答案。我的问题的真正答案实际上是一个复制品。问题是每次调用setPadding时,我都会给填充添加一个值
尽管我选择的答案不是导致我的问题的原因,但它是一个有效的答案。我的问题的真正答案实际上是一个复制品。问题是每次调用setPadding时,我都会给填充添加一个值。在一个滚动页面上,它确实会被调用三次。这可能是像素密度的问题。确实要求以像素为单位设置填充,但您是在
px
、sp
还是dp
中设置它?若你们读了文件,上面写着,我引用:
不同的屏幕具有不同的像素密度,
因此相同数量的像素可能对应不同设备上不同的物理尺寸。
因此,在指定两个视图之间的间距时,请使用dp而不是px:
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/clickme"
android:layout_marginTop="20dp" />
指定文本大小时,请始终使用sp:
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" />
此外,根据您的评论:
这个问题可能会有所帮助 虽然该方法可能只接受像素值,但遗憾的是,这并不能避免您需要考虑屏幕密度。相反,您需要根据DP确定值,然后在运行时以编程方式计算像素等效值。幸运的是,有一些内置的方法可以帮助您。这可以通过以下代码完成:
/// Converts 14 dip into its equivalent px
int dimensionInDp = 14;
Resources r = getResources();
float dimensionInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInDp, r.getDisplayMetrics());
尽管结果是一个float
,但您可以轻松地将其转换为int
,以便在setPadding(…)
方法中使用
(引用:)我正在使用draw方法在视图上绘制像素,例如:
canvas.drawRect(新的Rect(0,0,getWidth(),border.getWidth()),paint);
它真的画了一个100像素宽的矩形,当我在视图中调用setPadding(100,0,0,0)时,它会在平板电脑上设置3倍的填充,而在手机上显示x1。看看和问题是否有帮助。