0

こんばんは!作成したカスタム ビューで setPadding を実行しようとしていますが、ネイティブの setPadding() は何もしなかったので、自分で作成しました...しばらくすると、最初の呼び出しの後に setPadding が数回呼び出されることに気付きましたが、その理由がわかりません。 .. 助けてください :) (私のカスタム setPadding はかなり過剰かもしれません ^^)

ビューを含む XML を次に示します。それがパイチャートです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/PieDialog_llParent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/PieDialog_tvHeader"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Header"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/PieDialog_tvDiv1"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:textSize="0sp"/>

<TextView
    android:id="@+id/PieDialog_tvDiv2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="0sp" />

<com.SverkerSbrg.Spendo.Statistics.Piechart.PieChart
    android:id="@+id/PieDialog_Pie"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<TextView
    android:id="@+id/PieDialog_tvDiv3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="0sp" />

<FrameLayout
    android:id="@+id/PieDialog_flClose"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/PieDialog_tvClose"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Large Text" />

</FrameLayout>

</LinearLayout>

そして、ここに私がxmlを使用するコードがあります:

package com.SverkerSbrg.Spendo.Transaction.TransactionList.PieDialog;

imports...

public class PieDialog extends SpendoDialog{
private TransactionSet transactionSet;
private TransactionGroup transactionGroup;
private GUI_attrs gui_attrs;
private PieData pieData;

private PieChart pie;
private TextView tvHeader; 
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    View view = inflater.inflate(R.layout.transaction_list_pie_dialog, null);

    LinearLayout llParent = (LinearLayout) view.findViewById(R.id.PieDialog_llParent);
    llParent.setBackgroundColor(gui_attrs.color_Z0);

    tvHeader = (TextView) view.findViewById(R.id.PieDialog_tvHeader);
    tvHeader.setTextSize(gui_attrs.textSize_header);

    TextView tvDiv1 = (TextView) view.findViewById(R.id.PieDialog_tvDiv1);
    tvDiv1.setBackgroundColor(gui_attrs.color_Z2);

    TextView tvDiv2 = (TextView) view.findViewById(R.id.PieDialog_tvDiv2);
    tvDiv2.setPadding(0, gui_attrs.padding_Z0, 0, 0);

    PieChart pie = (PieChart) view.findViewById(R.id.PieDialog_Pie);
    pie.setPadding(40, 10, 40, 10);


    builder.setView(view);
    AlertDialog ad = builder.create();

    return ad;
}
public void initialize(GUI_attrs gui_attrs, TransactionSet transactionSet, long groupIdentifier){
    this.gui_attrs = gui_attrs;
    this.transactionSet = transactionSet;
}
}
4

1 に答える 1

1

私のコメントを推定するために、View設定されたパディングを尊重するのはカスタムオブジェクトの責任です。そのケースを確実に処理するために、次のようなことを行うことができます。

onMeasure()

int desiredWidth, desiredHeight;

desiredWidth = //Determine how much width you need
desiredWidth += getPaddingLeft() + getPaddingRight();

desiredHeight = //Determine how much height you need
desiredHeight += getPaddingTop() + getPaddingBottom();

int measuredHeight, measuredWidth;

//Check against the MeasureSpec -- if it's MeasureSpec.EXACTLY, or MeasureSpec.AT_MOST
//follow those restrictions to determine the measured dimension

setMeasuredDimension(measuredWidth, measuredHeight);

onLayout()

int leftOffset = getPaddingLeft();
int topOffset = getPaddingTop();

//layout your children (if any) according to the left and top offsets,
//rather than just 0, 0

onDraw()

canvas.translate (getPaddingLeft(), getPaddingTop());

//Now draw your stuff as normal
于 2013-06-23T21:48:32.413 に答える