2013-03-30 143 views
23

我打算在不同設備大小的文本視圖中使用不同的字體大小,以使字母易讀。我已決定不針對不同設備使用不同的佈局,併爲所有設備構建了通用佈局。現在唯一的問題是文字大小。根據設備的大小增加字體大小

問題:

  1. 我想就如何改變設備的基礎上,大小字體大小(物理尺寸)的技術建議。

  2. 如何根據縱橫比導出字體大小。

  3. 任何使用這種方法的缺陷?

XML對於該文本視圖

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/tvValue4" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="I planned to use different font size for the textview on different device size so as to make the letters legible. I have already decided not to use different layouts for different devices and built a common layout to fit in all the devices. Now the only problem is on the text size." 
     android:textColor="#000000" 
     android:textSize="15sp" /> 

</LinearLayout> 

在此先感謝

回答

0

Android已經建在公司招聘DP和SP設施。 dp是設備像素。它基本上是1dp = 1/160英寸。這允許您指定真實世界大小的字體高度。 Sp是縮放的像素。此大小根據默認字體大小進行縮放,因此用戶可以放大系統字體,並且您的應用將與其匹配。方便有視力問題的人需要大文本,而不會爲別人佔用屏幕空間。

你可能應該使用其中的一個。

+0

picpaste.com/Untitled1-4MSIpnIo.png請查看屏幕截圖我已經使用了的TextView的15dp。但是這在不同設備中以不同數量的線顯示。我需要擁有相同行數的所有屏幕。如果屏幕尺寸小,字體必須小,如果屏幕尺寸大,那麼字體必須變大。請傳遞您的建議 - iappmaker – iappmaker

+1

dp(或dip)是與設備無關的像素,而不是「設備像素」 。請參閱http://developer.android.com/guide/topics/resources/more-resources.html#Dimension您的文章的其餘部分每英寸大約160個點以及其他所有內容大多數都是正確的。我只是在迂腐。 –

23

是的,這種方法是有缺陷的。 Android設備具有不同的尺寸,但它們的密度也可能不同。

enter image description here

你應該只成爲繼Android的設計best practices

enter image description here

他們實際上是非常深思熟慮。你爲什麼要重新發明輪子?

+0

http://picpaste.com/Untitled1-4MSIpnIo.png請查看我使用15dp爲textview的屏幕截圖。但是這在不同設備中以不同數量的線顯示。我需要擁有相同行數的所有屏幕。如果屏幕尺寸小,字體必須小,如果屏幕尺寸大,那麼字體必須變大。請傳遞您的建議 – iappmaker

+0

請參閱http://developer.android.com/training/multiscreen/screendensities.html 「dp」是一個與密度無關的像素,對應於160 dpi處像素的物理尺寸。一個'sp'是相同的基本單位,但是由用戶的首選文字大小(它是一個與刻度無關的像素)縮放,因此在定義文字大小時(但決不是佈局大小),您應該使用此測量單位。 – CrandellWS

14

試試這個,將此屬性添加到您的xml中。它會調整基於screenize的文本大小嚐試它。

style="@android:style/TextAppearance.DeviceDefault.Medium" 
+9

這可從API 14中獲得..我正在使用min API 8 – iappmaker

6

對於字體大小使用比例像素(sp)。 Android會根據設備密度相應地縮放字體大小。以上帖子有更好的解釋和推理。

+5

我已更改爲sp。但仍然是同樣的問題。基本上我需要使這個文本視圖佔用所有設備的屏幕相同的百分比,並用文本填充 – iappmaker

+0

是你以編程方式或從XML設置字體大小? – bostan

+0

在xml中,因爲我在問題 – iappmaker

1
String s= "hello"; 
    TextView tv= (TextView) findViewById(R.id.tv); 
    Spannable span = new SpannableString(s); 
    span.setSpan(new RelativeSizeSpan(5f), 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    tv.setText(span); 

基於屏幕大小更改5f到任何你想要的。

http://developer.android.com/guide/practices/screens_support.html。檢查標題最佳實踐下的主題。

+0

這是如何不同於tv.setTextSize(size) – iappmaker

+0

您在textview中設置特定單詞的文本大小。如果你不需要在textview中使用相同字體大小的整個文本,那麼你可以使用它。如果你2個字的hello world,你可以增加hello字體的大小,保持word的大小一致。 – Raghunandan

+1

RelativeSizeSpan構造函數的值(5f)如何轉換爲sp?它有多少個sp?或者我該如何計算? –

0

對於這個問題我在如此多的項目中使用以下庫,並相信這是太棒了。無需擔心屏幕。但是,您需要爲製表符創建單獨的佈局。

https://github.com/intuit/sdp

+0

這更適合作爲評論。 – BlackBeard