få ut höjden på ett objekt som använder fill_parent?

Diskussion i 'Frågor, support och diskussion' startad av alioooop, 12 aug 2010.

  1. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    jaa min överskrift säger nog allt, hur gör man? får ut noll med getHeight...

    MVH Alioooop
     
  2. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    Höjden på ett element går inte att få fram förrän det är utritat.

    Därför går det inte att direkt få fram höjden i t.ex. onCreate.

    Jag har löst det genom att göra en egen View-class som ärver från den View-class som jag vill använda t.ex. TextView. Sedan overridar jag onSizeChanged som notifierar en lyssnare. Activityn som änvänder Viewn reggar sig som lyssnare och får sedan ett callback när Viewn är utritad och då går det att få fram höjden.
     
  3. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    oj det där lät smart gjort, kan du inte klistra in ett kodexempel, ska göra detta på en gridview :)
     
  4. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    I Viewn:
    Kod:
    public class MeassureTextView extends TextView {
    
      private DrawListener listener;
    
      public MeassureTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
    
      public MeassureTextView(Context context) {
        super(context);
      }
    
      @Override
      protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    
        if (listener != null) {
          new Thread() {
            @Override
            public void run() {
              listener.onPainted();
            }
          }.start();
    
        }
      }
    
      public void setListener(DrawListener listener) {
        this.listener = listener;
      }
    
      public void removeListener() {
        this.listener = null;
      }
    
      public interface DrawListener {
        public void onPainted();
      }
    I Activityn som använder viewn:

    Kod:
    public void onPainted() {
        runOnUiThread(new Runnable() {
    
          public void run() {
            meassureTextView.getHeight();
          }
        });
     
  5. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    visst ska jag byta ut GridView i xmlen mot CustomGridview som min klass nu heter? tänkte den går inte igenom compileringen o stannar vid setContentView(R.layout.main); i activityn som använder min view :P

    och ändrar jag inte till customgridview så stannar den på:

    CustomGridView gridview = (CustomGridView) findViewById(R.id.gridview);

    istället :P
     
  6. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    I layout-xml-filen lägger du till din egen view-klass istället för standardklassen, men man måste speca med hela paketnamnet.

    <se.oscar.weeknumber.MeassureTextView
    android:id="@+id/meassure"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/loading"
    android:textSize="20dp"/>
     
  7. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    Tack de funkar :)