2013-07-23 48 views
0

我已經擴展了TextView並添加了對邊框的支持,事情是當我畫一個邊框時,我需要在邊框邊填充邊框,以便文本移動。爲什麼我的TextView填充像素不可預知

設置我的邊框寬度,以像素爲單位,並因此吸引過來,但我的TF201平板電腦時,我setPadding上TextView的,出來的一些原因,它由3倍的像素相乘填充寬度即使setpadding documentation說,用像素明確定義。

編輯:

即使我選擇的答案是不是有什麼引起了我的問題,這是一個有效的答案。我的問題的真正答案實際上是從this重複。問題是我每次調用setPadding時都會在填充中添加一個值。它會在滾動到的頁面上被調用三次。

回答

2

這可能是像素密度的問題。其確實setpadding docs要求以像素爲單位設置填充,但是您是否將其設置爲pxspdp?如果你讀Supporting Different Densities文件,它說,我引述:

Different screens have different pixel densities,so the same number of pixels may correspond to different physical sizes on different devices.

所以,當你指定兩個視圖之間的間距,使用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" /> 

此外,基於您的公司mments:

drawRect unit issues android and Draw Rectangle which change size w.r.t different android screen size問題可能有幫助。

+0

我使用的拉伸方法來繪製像素到視圖中,例如:\t \t \t \t'canvas.drawRect(新的Rect(0,0,的getWidth(),border.getWidth ()),繪畫); \t',它確實繪製了一個寬度爲100px的矩形,當我在視圖上調用setPadding(100,0,0,0)時,它會在我的平板電腦上設置我的填充3x,而在手機上則顯示x1。 –

+0

看看[drawRect單元問題android](http://stackoverflow.com/questions/6922074/drawrect-unit-issues-android)和[繪製矩形,改變大小不同的android屏幕大小](http:// stackoverflow。 com/questions/6533368/draw-rectangle-which-change-size-wrt-different-android-screen-size)question helps。 –

0

雖然該方法可能只接受像素值,但遺憾的是,您無法將屏幕密度考慮在內。相反,您需要根據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(...)方法。

(引用:Converting pixels to dp