我使用achart引擎成功顯示餅圖。我想根據屏幕大小自定義我的標籤文字大小。提前感謝。標籤文字大小根據圖表中的屏幕尺寸android
回答
您可以設置標籤文字大小是這樣的:
renderer.setLabelsTextSize(size);
你必須找到找到屏幕尺寸和標籤尺寸之間的最佳比例最好的邏輯。
這是什麼我做了總結版本:
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;
}
所以我基本上取決於定製設備的屏幕密度的圖表的利潤率和文本大小。注意:我現在排除了中等密度的情況。
最好的做法是假的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);
這種解決方案在不同屏幕分辨率的情況下會如何工作。 – CoDe
這個問題歸結爲分辨率。 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);
我認爲做的最好辦法是文件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>
然後用getDimension和getDimensionPixelOffset轉換爲像素當配置渲染器時,如:
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,設計非常一致。
你可以試試這個:
renderer.setLegendTextSize(textSize);
我寫了兩個方法稱爲_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);
- 1. 根據屏幕尺寸縮小字體大小/邊距大小?
- 2. Android根據設備的屏幕尺寸調整圖像尺寸
- 3. 根據屏幕尺寸的Android Manifest
- 4. 根據屏幕尺寸設置WPF字體大小
- 5. 如何根據屏幕尺寸管理圖像大小
- 6. 根據屏幕尺寸/分辨率調整圖像大小
- 7. 根據屏幕尺寸
- 8. 根據屏幕尺寸
- 9. 根據屏幕尺寸更改小部件的大小?
- 10. 文字大小和不同的android屏幕尺寸
- 11. 根據屏幕尺寸更改圖像
- 12. Android屏幕尺寸和密度。如何選擇文字大小?
- 13. 根據屏幕尺寸自動調整HTML按鈕的大小?
- 14. 根據屏幕尺寸設置UICollectionViewFlowLayout的項目大小
- 15. 根據DataGridView中(的WinForms)屏幕尺寸
- 16. hr標籤根據屏幕尺寸進行響應
- 17. 根據屏幕尺寸不顯示DIV標籤
- 18. Android屏幕尺寸
- 19. Android屏幕尺寸
- 20. 根據屏幕尺寸的視口值
- 21. 根據不同的屏幕尺寸
- 22. 根據設備屏幕尺寸改變的Android繪圖
- 23. Android - 所有屏幕尺寸的按鈕文本大小
- 24. 基於Android屏幕尺寸計算圖像大小
- 25. Android:根據屏幕大小從標籤切換到分隔符
- 26. iOS故事板 - 根據屏幕尺寸改變字體大小的方法?
- 27. 在ImageGallery(縮略圖滾動)調節的ImageView大小根據屏幕尺寸
- 28. 根據屏幕尺寸更改CSS
- 29. 根據屏幕尺寸替換HTML
- 30. 改變CSS,根據屏幕尺寸
硬編碼大小不是個好主意。我提出了一個更好,更靈活的解決方案。 – Athlan