11

以下は私のカスタムのコードですView

XML レイアウト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.project.summary"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="@color/BgColor">

    <com.project.summary.customview.CustomView
        android:id="@+id/customView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:colorValue="@color/textRed"
        app:textString="This the Custom View!!!"
        app:textSize="20sp"
        />

</LinearLayout>

私のコードCustomView.java

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Log.e("140117", "onMeasure()"+this.getHeight()+"||"+this.getWidth());
}

テスト アクティビティのコード:

    public class CustomViewActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.customview_layout);
    }
}

logcat 出力:

01-17 13:47:01.203: E/140117(11467): onMeasure()0||0
01-17 13:47:01.243: E/140117(11467): onMeasure()28||212

StackOverflow を検索しましたが、誰も明確な答えを出していません。誰かが私を助けることができますか?

4

3 に答える 3

12

親ビューは、その子に対して複数回 measure() を呼び出すことができます。たとえば、親は指定されていないサイズで各子を 1 回測定して、どのくらいの大きさにしたいかを調べてから、制約されていないすべての子のサイズの合計が大きすぎるか小さすぎる場合は、実際の数値でそれらに対して measure() を再度呼び出すことができます (つまり、子供たちがそれぞれどのくらいのスペースを確保するかについて意見が一致しない場合、親が介入して 2 回目のパスでルールを設定します)。https://developer.android.com/guide/topics/ui/how-android-draws.htmlが言うように。

于 2015-10-08T07:31:46.247 に答える
0

過去にこれに似た問題が発生したのは、「onAnAction」コードがカスタム ビューのクラスではなく、アクティビティの onCreate のアクティビティのクラス コード AKA 内にある必要があったためです。

これは機能する可能性がありますが、保証はありません。通常、いじり、アンドロイドのライフサイクルを理解する必要があります。

于 2014-01-17T06:10:48.893 に答える
0

あなたの質問に何か欠けていますか?onMeasure をオーバーライドする場合は、setMeasuredDimension(int, int) を呼び出す必要があります。そうしないと、IllegalStateException が発生します。あなたの質問では、例外はないようです。

于 2017-12-12T13:11:16.520 に答える