web-dev-qa-db-ja.com

MPAndroidChart-凡例ラベルが切り取られています

MPAndroidChartライブラリ を使用しています。誰かがこの問題を抱えていますか?ラベルをBOTTOM位置にすると、カットされます。

ありがとうございました

enter image description here

21
rafaelasguerra

テキストが長すぎるおよびライブラリは新しい行へのラベルの「折り返し」をサポートしていないであるため、これらはカットされます。

凡例のラベルを短くするか、必要な機能を自分で実装する必要があります。

更新:

Legendの折り返しがサポートされるようになりました。

chart.getLegend().setWordWrapEnabled(true);
16
Philipp Jahoda

これは、6月(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;
}
44
Aksel Willgert

凡例の色とラベルで凡例をカスタマイズするには、次の手順に従って実装する必要があります手順1

Legend legend = mChart.getLegend();

ステップ2

int colorcodes[] = legend.Colors();

ステップ

for (int i = 0; i <  legend.Colors().length-1; i++) {
 .....
 .....
 }

ステップ4

次に、1つのレイアウトを水平または垂直にする必要があります。凡例の色コードとラベルを取得し、凡例の長さに応じてレイアウトとラベルを作成する必要があります。コードサンプルを以下に示します

        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));

これがあなたを助けることを願っています

7
Amandeep Rohila

ここでは、 "Traditional Android Way" "による簡単な方法を紹介します。これは非常に簡単です。私のコードは次のとおりです。

<LinearLayout
    Android:id="@+id/i_am_chart_view_container"
    ...
    Android:paddingRight="20dp"
    Android:clipChildren="false"
    Android:clipToPadding="false"
    .../>

コンテナレイアウトにpaddingを追加するか、チャートビューにmarginを追加し、最後にclipChildrenclipToPaddingをfalseに設定するだけです。

以下の結果:

青い領域はパディングまたはマージン領域です。

enter image description here

5
codezjx

凡例の位置がBelowChartLeft、BelowChartRight、BelowChartCenterの場合、折り返しコンテンツサポートは凡例の位置のみをサポートします

     Legend legend = pieChart.getLegend();
        legend.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
        legend.setWordWrapEnabled(true);

このセットのデータセットの後

 pieChart.setData(pieData)

それはうまくいきます

3
Vinod Ranga
 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);
3

凡例の値のクリッピングを回避するには、次のコードブロックを使用します。

Legend legend=lineChart.getLegend();
legend.setWordWrapEnabled(true);

Doc(凡例用):

/**
     * 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;
    }

x軸ラベルのクリッピングを回避するには

XAxis xAxis = lineChart.getXAxis();
xAxis.setAvoidFirstLastClipping(true);

Doc(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;
    }

これを試して:

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);
0
Vandana patel

長い研究の末、私は解決策を見つけました。以下のコードはそれを解決しました。

chart.getLegend()。setWordWrapEnabled(true);

0
SFDCCoder