Aufgeblasene Kinder mit benutzerdefiniertem LinearLayout werden beim Überschreiben von onMeasure nicht angezeigt

Ich versuche, eine zu zeigenMyCustomLinearLayout was sich erstrecktLinearLayout. Ich blase das aufMyCustomLinearLayout mit demandroid:layout_height="match_parent" Attribut. Was ich möchte, ist eineImageView in diesemMyCustomLinearLayout. Die Höhe davonImageView sollte seinmatch_parentund die Breite sollte gleich der Höhe sein. Ich versuche dies zu erreichen, indem ich die überschreibeonMeasure() Methode. Was passiert, ist dasMyCustomLinearLayout wird quadratisch wie es sollte, aber dieImageView wird nicht angezeigt.

Unterhalb meines verwendeten Codes.Bitte beachten Sie, dass dies eine extrem vereinfachte Version meines Problems ist. DasImageView wird durch eine komplexere Komponente ersetzt.

public MyCustomLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

private void init(Context context) {
    final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.view_myimageview, this);

    setBackgroundColor(getResources().getColor(R.color.blue));
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
    setMeasuredDimension(height, height);
}

Dasview_myimageview.xml Datei:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >

    <ImageView
        android:id="@+id/view_myimageview_imageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher" />

</merge>

Also, wenn ich die überschreibeonMeasure() Methode, dieImageView wird nicht angezeigt, wenn ich das nicht überschreibeonMeasure() Methode, dieImageView zeigt, aber viel zu klein, weil dieMyCustomLinearLayoutDie Breite ist zu klein.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage