Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的文本视图填充的像素不可预测_Android_View_Textview - Fatal编程技术网

Android 为什么我的文本视图填充的像素不可预测

Android 为什么我的文本视图填充的像素不可预测,android,view,textview,Android,View,Textview,我扩展了TextView并添加了对边框的支持,问题是当我绘制边框时,我需要在有边框的一侧添加填充,以便文本可以移动 我设置了以像素为单位的边框宽度,它会相应地绘制边框,但在我的TF201平板电脑上,当我在TextView上设置填充时,出于某种原因,它会将填充宽度乘以3倍(以像素为单位),即使该平板电脑说它是以像素为单位明确定义的 编辑: 尽管我选择的答案不是导致我的问题的原因,但它是一个有效的答案。我的问题的真正答案实际上是一个复制品。问题是每次调用setPadding时,我都会给填充添加一个值

我扩展了TextView并添加了对边框的支持,问题是当我绘制边框时,我需要在有边框的一侧添加填充,以便文本可以移动

我设置了以像素为单位的边框宽度,它会相应地绘制边框,但在我的TF201平板电脑上,当我在TextView上设置填充时,出于某种原因,它会将填充宽度乘以3倍(以像素为单位),即使该平板电脑说它是以像素为单位明确定义的

编辑:


尽管我选择的答案不是导致我的问题的原因,但它是一个有效的答案。我的问题的真正答案实际上是一个复制品。问题是每次调用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。看看和问题是否有帮助。