2015-05-17 45 views
0

我用下面的方法,編程創建的LinearLayout和兩個textviews填充它,添加文本,然後把它變成我以後使用一個以上的層中繪製形狀。然而,我注意到我不能創建一個小的字體大小 - 它似乎停留在相對較小的最小尺寸,並且我在該值下面指定的任何東西似乎都使它看起來越來越模糊(但仍然是相同的尺寸)。這可能是什麼原因?發生Android的:不能讓小字號的綱領性textviews

這種行爲是否我使用TypedValue.COMPLEX_UNIT_SP。

編輯:這大小保持,即使我指定喜歡的東西可笑一樣:

.setTextSize(TypedValue.COMPLEX_UNIT_SP, 60); 

它沒有得到任何大 - 它只是變得「更清晰」。

編輯2:如果我指定頂部文本視圖具有非常大的尺寸,那麼我設置第二個文本視圖越小,它變成 - 比例(例如,如果我將頂部設置爲100,底部爲50,看起來與頂部10和底部5完全相同)。但是,我絕不能減小頂級文本視圖的大小。

編輯3:如果我刪除textviews之一,只留下另一個在佈局一個TextView的 - 我不能在所有的改變大小。我只能根據我設置數字的低度來做出或多或少的模糊,但它總是會在屏幕上顯示完全相同的大小。

private Drawable createTextLayer() { 

    LinearLayout newLinearLayout = new LinearLayout(getContext()); 

    newLinearLayout.setOrientation(LinearLayout.VERTICAL); 

    newLinearLayout.setGravity(Gravity.CENTER); 

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 

    newLinearLayout.setBackgroundColor(getColor(R.color.somecolor)); 

    newLinearLayout.setLayoutParams(layoutParams); 

    TextView headlinetv = new TextView(getContext()); 
    TextView bodytv = new TextView(getContext()); 

    headlinetv.setText(headlineText); 
    headlinetv.setTextSize(7); 
    headlinetv.setGravity(Gravity.CENTER); 

    bodytv.setText(bodyText); 
    bodytv.setTextSize(6); 
    bodytv.setGravity(Gravity.CENTER); 

    newLinearLayout.addView(headlinetv); 
    newLinearLayout.addView(bodytv); 

    newLinearLayout.setDrawingCacheEnabled(true); 

    newLinearLayout.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

    newLinearLayout.layout(0, 0, newLinearLayout.getMeasuredWidth(), newLinearLayout.getMeasuredHeight()); 

    newLinearLayout.buildDrawingCache(true); 

    Bitmap b = Bitmap.createBitmap(newLinearLayout.getDrawingCache()); 

    newLinearLayout.setDrawingCacheEnabled(false); 

    return new BitmapDrawable(getResources(), b); 
} 
+0

setTextSize使用COMPLEX_UNIT_SP默認 – Blackbelt

回答

0

事實證明,這是相當棘手,我花了幾個小時來解決,但我張貼了別人誰在類似情況下最終答案。

原因:
整個可繪圖層是形狀上方的最上層,因此無論如何拉伸到形狀的大小。爲了將它拉伸到形狀的大小,最大的視圖被拉伸(基本上是最長的textview),因此不能放大或縮小。

解決辦法:
予定義的兩個更多textviews,由1個字符給他們中最長的字符串,並把文本顏色是透明的。我寧願給它們作爲內容的空白空間,但android拒絕測量包含空格的textview,所以它必須是實際的文本。我把一個文本視圖放在頂部,一個放在底部,因此可見文本看起來完全居中並且字體大小正確。

編輯: 有原來是這樣做的更好的方法。將textview定義爲與它作爲一個圖層所在的形狀相同的大小,並在textview周圍定義填充(使用它來查找所需的最小填充量)。如果您有多個文字瀏覽,請將形狀大小除以文字瀏覽的數量,併爲每個文字瀏覽一小部分。

0

更改您的代碼:

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 7); 

變化的7字體大小爲任何你想要的字體大小。

+1

應該工作..但在實踐中卻沒有。我只能減小較低文本視圖的大小 - 並且只能作爲較高文本視圖的比例。上方文本視圖的大小始終保持不變 – Jon