Wieso "zerquetscht" Dialog meinen Custom View?

DieGoldeneMitte

DieGoldeneMitte

Dauergast
262
Hallo,

ich möchte in einem Dialog einen selbst programmierten View rendern. Dieser setzt seine Größe in onMeasure() mittels setMeasuredDimension(w,h) auf feste Werte. Bei der Höhe wird mein Wert vom Dialog auch respektiert (sprich benutzt), aber bei der Breite nicht (diese wird aus den Buttons darunter bestimmt). Kann man den Dialog dazu bringen, die Breite des Views zu nutzen,oder muss ich irgendwie die Breite von außen erzwingen? Oder habe ich irgendetwas naheliegendes übersehen?

ADD:
setMinimumWidth() und setMeasuredWidth( MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY,w),h) helfen beide nicht. Übrigens wird der Dialog zu groß, wenn ich MeasureSpec auf die Höhe anwende? Wieso datt denn? ;-)

Der Dialog wird ganz normal wie folgt gesetzt:
Code:
Dialog d= new Dialog(this);  d.setContentView(R.id.mylayout)
Das Layout:
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:id="@+id/root"
>

<dgm.playground.WidthBug
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/bug"
/>

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
>
<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Setzen"
  android:id="@+id/okay"
/>
<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Abbruch"
  android:id="@+id/cancel"
/>
</LinearLayout>
</LinearLayout>
Der Custom View:
Code:
package dgm.playground;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class WidthBug extends View {

    int h, w;
    Paint yellow;
    
    public WidthBug( Context context, AttributeSet attrs ) {
        super( context, attrs );
        h = 256;
        w = 256;
        yellow = new Paint();
        yellow.setColor(0xffffff00);
        yellow.setStrokeWidth(4);
    }

    @Override
    public void onMeasure( int hSpec, int wSpec ) {
        setMeasuredDimension( w, h );
    }
    
    @Override
    public void onDraw( Canvas c ) {
        c.drawLine(0,0,w/2,h/2,yellow);
        c.drawLine(0,h,w/2,h/2,yellow);
    }

}
 
Zuletzt bearbeitet:
Hah, Problem selbst gelöst:

Ich muss bei meinem custom View bloß die layout_width="wrap_content" setzen.

(Extra Post, damit man sieht, dass die Frage beantwortet ist).
 

Ähnliche Themen

W
  • waltsoft
Antworten
4
Aufrufe
935
waltsoft
W
L
Antworten
1
Aufrufe
712
louisbgt
L
P
Antworten
0
Aufrufe
553
Pascppal
P
Zurück
Oben Unten