1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Wieso "zerquetscht" Dialog meinen Custom View?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von DieGoldeneMitte, 02.03.2011.

  1. DieGoldeneMitte, 02.03.2011 #1
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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: 02.03.2011
  2. DieGoldeneMitte, 02.03.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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).
     

Diese Seite empfehlen