2012-09-27 117 views
13

我正在使用galaxy tab 1,7英寸hdpi和galaxy tab plus 7英寸hdpi但分辨率更高,而在我的應用程序中,文本可以在galaxy tab中正常讀取,但在galaxy tab中可以正常讀取有太多的小。 在字體大小和佈局大的情況下使用sp。任何想法?謝謝不同分辨率的文字大小

+0

也許你可以從這裏找到答案還可以從這裏找到答案http://stackoverflow.com/questions/16706076/font-size-and-images-for-different-devices –

回答

2

您可以使用this尺寸中的任何一種,根據屏幕的物理尺寸以的價格銷售。所有設備上的文本將具有相同的物理尺寸。

15

你只需要創建與密度或屏幕尺寸 不同的文件夾一樣

選項1.

values-large 
values-small 
values-normal 

更多解釋檢查此鏈接...

Multiple Screen Support

選項2

mTextView.setTextSize(16 * getResources().getDisplayMetrics().density); 

這會給TEXTSIZE取決於密度..

+0

是的,但2片使用大布局,但具有不同的分辨率,然後我會有同樣的問題。 – colymore

4

試試這個:

這樣

android:textSize= "10sp" 

SP

比例獨立像素 - 這就像dp單元,但它也是 根據用戶的字體大小首選項縮放。建議您在指定字體大小時使用本機的 ,因此它們將根據屏幕密度和用戶偏好進行調整。

+5

textSize,而不是文字大小 –

18

通過硬件規格Galaxy Tab 1是MDPI設備,但由於它使用Android 2.x,因此它採用編程方式將其設置爲使用HDPI資源。所以我可以建議你做如下:

  1. values目錄中創建文件dimens.xml
  2. 放在那裏<dimen name="font_size">30sp</dimen>。這是默認的字體大小。
  3. values-large目錄下創建文件dimens.xml
  4. 放在那裏<dimen name="font_size">20sp</dimen>。這是字體大小的Galaxy Tab 1
  5. values-sw600dp目錄下創建文件dimens.xml
  6. 放在那裏<dimen name="font_size">30sp</dimen>。這是Android 3.x及更新版本的其他平板電腦的字體大小。
  7. 在佈局指定android:textSize="@dimens/font_size"
+0

爲什麼你需要把文字尺寸放在不同的值文件夾? Android將默認值文件夾視爲mdpi設備的一個文件夾,並根據當前設備配置對其進行縮放。如果設備處於大類別中,則會對其進行縮放。糾正我,如果我錯了。 – karn

+0

因爲Galaxy Tab 1是MDPI,但是將文字縮放到HDPI尺寸 – vasart

+1

尺寸和分辨率是兩碼事。小尺寸設備可以位於hdpi類別中,而ldpi類別可以位於大型設備中。那麼如何使用values-large和values-small在這裏有什麼幫助? – karn

32

這應該是對你有所幫助,如果你想以編程方式設置大小。文本將在相同的大小顯示每個設備上

TextView text = new TextView(this); 
text.setText("text"); 
text.setTextSize(16 * getResources().getDisplayMetrics().density); 
+2

我試過'Canvas.setTextSize()'。它確實有幫助,儘管文本在我測試過的兩個設備上的大小不一樣。 – hBrent

+0

如果屏幕尺寸較大但密度較低,則不起作用。 – usman

+0

但不是密度在DP?它喜歡將xml中的文本大小設置爲16dp,這是不對的,我認爲 – has19

4

(1)I認爲使用「DP」或「浸漬」爲文本比使用「SP」更好,因爲DP(密度像素)根據屏幕密度調整。所以文本在高密度設備上看起來會更大,在低密度設備上看起來會更小。

(2),或者如果你特別希望使用「SP」爲文本大小,那麼就可以檢測到該設備的密度,然後相應地設置文本的大小:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    switch(displayMetrics.densityDpi){ 
     case DisplayMetrics.DENSITY_LOW: 
      //set text-size for low-density devices. 
      break; 
     case DisplayMetrics.DENSITY_MEDIUM: 
      //set text-size for medium-density devices. 
      break; 
     case DisplayMetrics.DENSITY_HIGH: 
      //set text-size for high-density devices. 
      break; 
    } 
1

的TextView headerTextView(字符串標籤){

TextView headerTextView = new TextView(this.context); 
    float scale = context.getResources().getDisplayMetrics().density; 
    if(scale > 2.0) { 
    headerTextView.setWidth(210); 
    headerTextView.setHeight(120); 
    headerTextView.setTextSize(17); 
    } 
    else { 
     headerTextView.setWidth(125); 
     headerTextView.setHeight(60); 
     headerTextView.setTextSize(21); 
    } 
2

下面的代碼來調整在一個TextView字體大小縮放,使用在用戶系統字體大小設置。

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getRealSize(size); 
int screenWidth = size.x; 
float fontscale = getResources().getConfiguration().fontScale; 
float textSize = (screenWidth/ fontscale)/10; 
Log.e(TAG, "textSize is: " + textSize); 
yourTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); 
+1

調用需要API level 17 for'display.getRealSize(size);' –

0

總之,你可以利用scalable DPscalable Font的方法。

Android項目結構固有地允許通過在dimens.xml文件定義它們支持的屏幕尺寸指定不同的字體大小(SP)和餘量的值(DP)。但仍然存在的問題是 - 要使用什麼值? UX設計師通常只提供一套樣式指南(例如,360x640 DP屏幕尺寸),並且不提供所有其他支持的屏幕尺寸。因此,爲其他支持的屏幕尺寸使用正確的價格仍然沒有答案。

一個很好的解決方案(按我的understading)是利用dimens.xml文件現成的可擴展字典,類似於this庫提供文件的字典的東西。在將這些xml文件添加到項目中之後,您只需使用佈局中的鍵,然後Android會自動使用各個目錄中的字體/邊距值。請參考here的視覺差異 - 有和沒有這種方法。

相關問題