2012-12-28 53 views

回答

1

您可以設置標籤文字大小是這樣的:

renderer.setLabelsTextSize(size); 

你必須找到找到屏幕尺寸和標籤尺寸之間的最佳比例最好的邏輯。

13

這是什麼我做了總結版本:

public static final int TEXT_SIZE_XHDPI = 24; 
public static final int TEXT_SIZE_HDPI = 20; 
public static final int TEXT_SIZE_MDPI = 18; 
public static final int TEXT_SIZE_LDPI = 13; 

XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 

    switch (getResources().getDisplayMetrics().densityDpi) { 
     case DisplayMetrics.DENSITY_XHIGH: 
       renderer.setMargins(new int[] { 40, 90, 25, 10 }); 
       renderer.setAxisTitleTextSize(Constants.TEXT_SIZE_XHDPI); 
       renderer.setChartTitleTextSize(Constants.TEXT_SIZE_XHDPI); 
       renderer.setLabelsTextSize(Constants.TEXT_SIZE_XHDPI); 
       renderer.setLegendTextSize(Constants.TEXT_SIZE_XHDPI); 
       break; 
     case DisplayMetrics.DENSITY_HIGH: 
       renderer.setMargins(new int[] { 30, 50, 20, 10 }); 
       renderer.setAxisTitleTextSize(Constants.TEXT_SIZE_HDPI); 
       renderer.setChartTitleTextSize(Constants.TEXT_SIZE_HDPI); 
       renderer.setLabelsTextSize(Constants.TEXT_SIZE_HDPI); 
       renderer.setLegendTextSize(Constants.TEXT_SIZE_HDPI); 
       break; 
     default: 
       renderer.setMargins(new int[] { 30, 50, 20, 10 }); 
       renderer.setAxisTitleTextSize(Constants.TEXT_SIZE_LDPI); 
       renderer.setChartTitleTextSize(Constants.TEXT_SIZE_LDPI); 
       renderer.setLabelsTextSize(Constants.TEXT_SIZE_LDPI); 
       renderer.setLegendTextSize(Constants.TEXT_SIZE_LDPI); 
       break; 
    } 

所以我基本上取決於定製設備的屏幕密度的圖表的利潤率和文本大小。注意:我現在排除了中等密度的情況。

+0

硬編碼大小不是個好主意。我提出了一個更好,更靈活的解決方案。 – Athlan

2

最好的做法是假的TextView放入佈局,以獲得TEXTSIZE:

<TextView 
     android:id="@+id/dummyTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:text="TextView" /> 

而在你的示例代碼:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView); 
float textSize = testTextView.getTextSize(); 
renderer.setLabelsTextSize(textSize); 
renderer.setLegendTextSize(textSize); 
+0

這種解決方案在不同屏幕分辨率的情況下會如何工作。 – CoDe

23

這個問題歸結爲分辨率。 achartengine似乎設計時考慮了原始像素,而在過去幾年中,顯示質量和像素密度急劇增加。我的HTC One上的achartengine樣本的標籤很小!

Android已經推出了scale-independent pixels。使用achartengine的關鍵是TypedValue類。這是我做的:

DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
float val = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18, metrics); 

我從上面的鏈接中的「文字大小中等」得到18。

然後,您可以使用val任何地方您想使用中等大小的文字。例如:

renderer.setLabelsTextSize(val); 
+0

我應該通過什麼樣的矩陣? –

+0

對不起 - 我錯過了原來的答案。我只是添加了代碼來獲取指標。 –

+0

非常感謝..! – berserk

2

我認爲做的最好辦法是文件dimens.xml在DP和SP來定義大小,像這樣:

<dimen name="graph_chart_text_size">16sp</dimen> 
<dimen name="graph_axis_title_text_size">14sp</dimen> 
<dimen name="graph_labels_text_size">12sp</dimen> 
<dimen name="graph_labels_padding">5dp</dimen> 
<dimen name="graph_legend_text_size">14sp</dimen> 
<dimen name="graph_legend_height">40dp</dimen> 
<dimen name="graph_point">3dp</dimen> 
<dimen name="graph_line">3dp</dimen> 
<dimen name="graph_margin_top">10dp</dimen> 
<dimen name="graph_margin_left">40dp</dimen> 
<dimen name="graph_margin_right">10dp</dimen> 
<dimen name="graph_margin_bottom">20dp</dimen> 

然後用getDimensiongetDimensionPixelOffset轉換爲像素當配置渲染器時,如:

renderer.setChartTitleTextSize(context.getResources().getDimension(R.dimen.graph_chart_text_size)); 
renderer.setAxisTitleTextSize(context.getResources().getDimension(R.dimen.graph_axis_title_text_size)); 
renderer.setLabelsTextSize(context.getResources().getDimension(R.dimen.graph_labels_text_size)); 
renderer.setLegendTextSize(context.getResources().getDimension(R.dimen.graph_legend_text_size)); 
renderer.setLegendHeight(context.getResources().getDimensionPixelOffset(R.dimen.graph_legend_height)); 
renderer.setMargins(new int[]{ 
     context.getResources().getDimensionPixelOffset(R.dimen.graph_margin_top), 
     context.getResources().getDimensionPixelOffset(R.dimen.graph_margin_left_mood), 
     context.getResources().getDimensionPixelOffset(R.dimen.graph_margin_bottom), 
     context.getResources().getDimensionPixelOffset(R.dimen.graph_margin_right)}); 
    } 

我測試的手機範圍從800x480到1920x1080,設計非常一致。

0

你可以試試這個:

renderer.setLegendTextSize(textSize); 
3

我寫了兩個方法稱爲_DP和_SP轉換爲DP和SP值。

private DisplayMetrics displayMetrics; 
private boolean isPortrait; 
int _dp(float pixels) { 
    return (int)(pixels * displayMetrics.density); 
} 
float _sp(float pixels) { 
    return (pixels * displayMetrics.scaledDensity); 
} 

在你的onCreate,你需要設置displayMetrics值:

displayMetrics = (this.getResources()).getDisplayMetrics(); 

然後你只需要使用_SP和_DP獲得SP/DP值。比如設置字體縮放到18

renderer.setAxisTitleTextSize(_sp(18)); 

,並與DP值設置頁邊距:

renderer.setMargins(new int[] {_dp(25), _dp(30), _dp(35), _dp(20)}); 

注:我做了一個改變此代碼。對於這些函數可以得到0值 - 如果除以返回值,這是一個真正的問題。我添加了一個測試返回1,如果返回值是< 1. ie:return((rv < 1)?1:v);