Je crée un graphique à barres, mais j'ai rencontré un problème avec les étiquettes d'axe x étant coupées sur une tablette. Ci-joint la disposition correcte sur un téléphone et la disposition incorrecte sur une tablette.Androidplot - Etiquettes de l'axe X coupées
Est-ce que quelqu'un sait pourquoi ce problème se produit sur une tablette et comment y remédier?
Présentation du téléphone
https://drive.google.com/file/d/0B4CxFPSlLEYpdGZCMm8xdGZHTlk/edit?usp=sharing
layout Tablet
https://drive.google.com/file/d/0B4CxFPSlLEYpakx1WFo3cGhNSTg/edit?usp=sharing
Ceci est mon code pour créer le graphique à barres.
fichier Mise en page
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.usage.bigpondpro.MainActivity$PlaceholderFragment"
android:id="@+id/svDailyContainter" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<com.androidplot.xy.XYPlot
android:id="@+id/dailyXYPlot"
android:layout_width="match_parent"
android:layout_height="match_parent"
androidPlot.title="Sample Bar Graph"
androidPlot.titleWidget.labelPaint.textSize="@dimen/title_font_size"
androidPlot.graphWidget.marginTop="20dp"
androidPlot.graphWidget.marginLeft="10dp"
androidPlot.graphWidget.marginBottom="20dp"
androidPlot.graphWidget.marginRight="10dp"
androidPlot.rangeLabelWidget.labelPaint.textSize="@dimen/range_label_font_size"
androidPlot.domainLabelWidget.labelPaint.textSize="@dimen/range_label_font_size"
/>
</LinearLayout>
</ScrollView>
Activité
private void CreateGraph()
{
// initialize our XYPlot reference:
XYPlot plot = (XYPlot)this.findViewById(R.id.dailyXYPlot);
// Create
a couple arrays of y-values to plot:
Number[] series1Numbers = GenerateGraphValues();
// Turn the above arrays into XYSeries':
XYSeries series1 = new SimpleXYSeries(
Arrays.asList(series1Numbers), // SimpleXYSeries takes a List so turn our array into a List
SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY means use the element index as the x value
"Series1"); // Set the display title of the series
BarFormatter series1Format = new BarFormatter(Color.rgb(51, 181, 229), Color.TRANSPARENT);
PointLabelFormatter plf = new PointLabelFormatter();
plf.getTextPaint().setTextSize(18);
plf.getTextPaint().setColor(Color.BLACK);
series1Format.setPointLabelFormatter(plf);
series1Format.setPointLabeler(new PointLabeler() {
DecimalFormat df = new DecimalFormat("##0.00");
public String getLabel(XYSeries series, int index) {
//need to check for null
if(series.getY(index) == null) return "";
return df.format(series.getY(index));
}
});
// add a new series' to the xyplot:
plot.addSeries(series1, series1Format);
//Y axis config
plot.setRangeLabel("Values"); //label
plot.setRangeBoundaries(0, 110, BoundaryMode.FIXED); //scale
plot.setRangeStep(XYStepMode.SUBDIVIDE, 5); //steps
plot.getGraphWidget().getRangeLabelPaint().setTextSize(26); //font size
DecimalFormat nf = new DecimalFormat("#0");
plot.setRangeValueFormat(nf);
//X Axs config
plot.setDomainLabel("Indexes");
plot.setDomainStep(XYStepMode.SUBDIVIDE, 25);
// plot.getGraphWidget().setDomainValueFormat(new GraphXLabelFormat());
plot.getGraphWidget().getDomainLabelPaint().setTextSize(18);
plot.getGraphWidget().setDomainLabelVerticalOffset(5);
//other config
plot.getLegendWidget().setVisible(false); //hide legend
plot.getGraphWidget().getDomainGridLinePaint().setColor(Color.TRANSPARENT); //hide grid lines
plot.getGraphWidget().getRangeGridLinePaint().setColor(Color.TRANSPARENT); //hide grid lines
plot.getGraphWidget().setGridPaddingLeft(40); //give some padding
plot.getGraphWidget().setGridPaddingRight(40); //give some padding
plot.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE); //background color
plot.getTitleWidget().setPaddingTop(10); //give some padding
//set bar width
BarRenderer<?> renderer = (BarRenderer<?>) plot.getRenderer(BarRenderer.class);
renderer.setBarWidth(25);
//change x lable orientation
plot.getGraphWidget().setDomainLabelOrientation(-90);
//set graph height and width
/**
For some reason when the device is in landscape mode the entire graph canvas is blank.
Through trial and error if in landscape mode and the screen width is multiplied by 0.96 the graph and all it's data appear again.....why???
**/
DisplayMetrics displaymetrics = new DisplayMetrics();
((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displaymetrics);
int Width = (int) (displaymetrics.widthPixels * 0.96);
//default to portrait
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 750);
//need to check the orienation
if(IsLandscapeOrientation())
{
lp = new LayoutParams(Width, 560);
}
plot.setLayoutParams(lp);
}
private Number[] GenerateGraphValues()
{
int min = 30;
int max = 100;
int PlotPoints = 25;
Number[] series1Numbers = new Number[PlotPoints];
for(int x = 0; x < PlotPoints; x++){
Random r = new Random();
int randomNumber = r.nextInt(max - min + 1) + min;
series1Numbers[x] = randomNumber;
}
return series1Numbers;
}
private boolean IsLandscapeOrientation()
{
Display display = ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
boolean IsLandscape;
switch (rotation) {
case Surface.ROTATION_0:
case Surface.ROTATION_180:
IsLandscape = false;
break;
case Surface.ROTATION_90:
case Surface.ROTATION_270:
IsLandscape = true;
break;
default:
IsLandscape = true;
break;
}
return IsLandscape;
}
J'avais déjà une valeur de 20dp définie pour androidPlot.graphWidget.marginBottom mais une augmentation à 30dp a résolu mon problème. – Mark