J'utilise bibliothèque MPAndroidChart . Quelqu'un a ce problème? Lorsque je mets les étiquettes en position INFÉRIEURE, elles sont coupées.
Je vous remercie
Ils sont coupés car votre le texte est trop long et la bibliothèque ne prend pas en charge le "wrapping" des étiquettes vers une nouvelle ligne.
Vous devrez raccourcir vos étiquettes de légende ou implémenter vous-même la fonctionnalité souhaitée.
MISE À JOUR:
L'habillage de mots pour Legend
est maintenant pris en charge.
chart.getLegend().setWordWrapEnabled(true);
Cela semble être une nouvelle fonctionnalité depuis juin (2015):
chart.getLegend().setWordWrapEnabled(true);
Javadoc:
/**
* Should the legend Word wrap? / this is currently supported only for:
* BelowChartLeft, BelowChartRight, BelowChartCenter. / note that Word
* wrapping a legend takes a toll on performance. / you may want to set
* maxSizePercent when Word wrapping, to set the point where the text wraps.
* / default: false
*
* @param enabled
*/
public void setWordWrapEnabled(boolean enabled) {
mWordWrapEnabled = enabled;
}
Vous devez implémenter des légendes personnalisées avec leurs couleurs et étiquettes de légendes en suivant les étapes Étape 1
Legend legend = mChart.getLegend();
Étape 2
int colorcodes[] = legend.Colors();
étapes
for (int i = 0; i < legend.Colors().length-1; i++) {
.....
.....
}
étapes 4
Ensuite, vous devez prendre une disposition horizontale ou verticale. Vous devez obtenir les codes de couleurs des légendes et les légendes et, selon la longueur des légendes, créer une mise en page et une étiquette. Un exemple de code est donné ci-dessous
LinearLayout.LayoutParams parms_left_layout = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
parms_left_layout.weight = 1F;
LinearLayout left_layout = new LinearLayout(context);
left_layout.setOrientation(LinearLayout.HORIZONTAL);
left_layout.setGravity(Gravity.CENTER);
left_layout.setLayoutParams(parms_left_layout);
LinearLayout.LayoutParams parms_legen_layout = new LinearLayout.LayoutParams(
20, 20);
parms_legen_layout.setMargins(0, 0, 20, 0);
LinearLayout legend_layout = new LinearLayout(context);
legend_layout.setLayoutParams(parms_legen_layout);
legend_layout.setOrientation(LinearLayout.HORIZONTAL);
legend_layout.setBackgroundColor(colorcodes[i]);
left_layout.addView(legend_layout);
TextView txt_unit = new TextView(context);
txt_unit.setText(legend.getLabel(i));
J'espère que ceci vous aidera
Ici, je vais vous montrer un moyen simple par "Traditionnel Android Way", c'est assez simple, mon code est ci-dessous:
<LinearLayout
Android:id="@+id/i_am_chart_view_container"
...
Android:paddingRight="20dp"
Android:clipChildren="false"
Android:clipToPadding="false"
.../>
Il suffit d'ajouter un peu de padding
à la disposition du conteneur, ou un peu de margin
à la vue graphique, et enfin de définir clipChildren
& clipToPadding
sur false.
Résultat ci-dessous:
la zone bleue est le remplissage ou la zone de marge.
Définir la prise en charge du contenu enveloppant uniquement la position Legends lorsque la position de la légende est inférieure à ChartCef
Legend legend = pieChart.getLegend();
legend.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
legend.setWordWrapEnabled(true);
Après cet ensemble de données
pieChart.setData(pieData)
ça marchera bien
Legend l = pieChart.getLegend();
l.setPosition(LegendPosition.BELOW_CHART_LEFT);
l.setXEntrySpace(7f);
l.setYEntrySpace(0f);
l.setYOffset(0f);
l.setDirection(LegendDirection.LEFT_TO_RIGHT);
l.setWordWrapEnabled(true);
Pour éviter écrêtage des valeurs de légende utilisez le bloc de code suivant
Legend legend=lineChart.getLegend();
legend.setWordWrapEnabled(true);
Doc (pour la légende):
/**
* Should the legend Word wrap? / this is currently supported only for:
* BelowChartLeft, BelowChartRight, BelowChartCenter. / note that Word
* wrapping a legend takes a toll on performance. / you may want to set
* maxSizePercent when Word wrapping, to set the point where the text wraps.
* / default: false
*
* @param enabled
*/
public void setWordWrapEnabled(boolean enabled) {
mWordWrapEnabled = enabled;
}
Pour éviter écrêtage des étiquettes de l'axe des x utilisez
XAxis xAxis = lineChart.getXAxis();
xAxis.setAvoidFirstLastClipping(true);
Doc (pour les étiquettes de l'axe des x):
/**
* if set to true, the chart will avoid that the first and last label entry
* in the chart "clip" off the Edge of the chart or the screen
*
* @param enabled
*/
public void setAvoidFirstLastClipping(boolean enabled) {
mAvoidFirstLastClipping = enabled;
}
Essaye ça:
Legend l = pieChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
l.setXEntrySpace(4f);
l.setYEntrySpace(0f);
l.setWordWrapEnabled(true);
Après une longue recherche, j'ai trouvé la solution. Le code ci-dessous l'a résolu.
chart.getLegend (). setWordWrapEnabled (true);