Android Größenanderung detektieren

jf

Bekanntes Mitglied
Hallo, ich hoffe dieses Mal bin ich nicht der einzige, welcher in dieser Diskussion antwortet... :D

Ich würde gern Größenänderungen einer View (android.widget.Button) detektieren wollen.
Einen OnSizeChangedListener scheint diese View aber nicht zu unterstützen.
Wie kann ich mein Ziel dennoch erreichen?
 

Hobelhai

Mitglied
Du solltest mit einer eigenen Klasse Button überschreiben. Dort musst Du die OnDraw-Methode implementieren (wird z.B. bei jeder Größenanderung aufgerufen), hier kannst Du die aktuelle Größe deines Buttons erfragen:
Java:
public class MyButton extends Button
{
     protected void onDraw(Canvas canvas)
     {
          int width = this.getWidth();
          int height = this.getHeight();
     }
}
Deine selbstgeschriebene Klasse findest Du im Layout-Editor unter "Custom & Library Views". Um sie via XML zu verwenden, muss Du deiner Klasse noch einen Konstruktor mitgeben, der die zwei Attribute Context und AttributeSet empfängt.
Java:
public MyButton(Context context, AttributeSet attr)
{....}
 
Zuletzt bearbeitet:

jf

Bekanntes Mitglied
Hi Hobelhai, vielen Dank für die Info! - Ich habe mich schon gefragt, wofür denn die zusätzlichen Konstruktoren gut seien. :D

Wenn ich also eine View baue, deren Konstruktor einen weiteren (eigenen) Parameter benötigt, dann wird diese Komponente per Definition nicht im Layout-Editor verwendet werden können?
=> Also für sollte für diese Anwendung doch besser eine zusätzliche Methode init() implementiert werden, welche den zusätzlichen Parameter annimmt.

Bezieht sich dieser Punkt wirklich nur auf den visuellen Editor, oder aber auch auf das ganze XML-Layouting?

Wofür ist überhaupt der dritte Parameter:
Code:
int defStyle
?
 

Hobelhai

Mitglied
Wenn ich also eine View baue, deren Konstruktor einen weiteren (eigenen) Parameter benötigt, dann wird diese Komponente per Definition nicht im Layout-Editor verwendet werden können?
Genau so sieht es aus.
=> Also für sollte für diese Anwendung doch besser eine zusätzliche Methode init() implementiert werden, welche den zusätzlichen Parameter annimmt.
Entweder so, oder Du erledigst das ganze Thema programmatisch in deiner Activity. Dafür benötigst Du nur den Context-Parameter:
Java:
public class MyButton extends Button
{
     public MyButton(Context context, Object irgendeinObject)
     {
          super(context);
       ....//mach was mit deinem Object
     }
}
In deiner Activity holst Du dir einen Verweis auf die ViewGroup und fügst den Button hinzu:
Java:
MyButton button = new MyButton(this, myObject);
LinearLayout layout = findViewById(R.id.linearLayout1);
layout.addView(button); //von der addView-Methode existieren auch diverse Varianten!

Bezieht sich dieser Punkt wirklich nur auf den visuellen Editor, oder aber auch auf das ganze XML-Layouting?
Der visuelle Editor ist ja nur eine graphische Interpretation der XML-Datei. Der Punkt bezieht sich also auf das komplette Thema Layout per XML.

Wofür ist überhaupt der dritte Parameter:
Code:
int defStyle
?
Damit kannst Du deiner View noch einen Style zuweisen. Les Dich mal rein bei Android Developers, Thema "Styles/Themes".
 

Neue Themen


Oben