2016-04-20 10 views
0

Wenn ich den Text für eine Button kenne, gibt es eine Möglichkeit, die Schaltfläche Abmessungen (Breite und Höhe) vor dem Erstellen der Schaltfläche zu berechnen?Berechnen Button Dimensionen durch seine Beschriftung (Text), ohne es zu erstellen

Tasten haben die gleichen Chrom, Paddings, Ränder und Schriftart. Sie variieren nur System für System. Theoretisch können Tastenabmessungen durch ihren Text bestimmt werden.

Falls Sie sich fragen, warum ich das machen möchte, möchte ich ein dynamisches Array von horizontalen Schaltflächen erstellen, und wenn es nicht genug Platz ist, würde ich ein Menü anstelle der überschüssigen Schaltflächen erstellen.

Antwort

1

Sie können so etwas wie dies versuchen:

Button button = new Button(context); 
button.setText("Testing"); 
button.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
int width = button.getMeasuredWidth(); 
int height = button.getMeasuredHeight(); 

Soweit ich weiß, wenn Sie es von Java erstellen, wird es Ihnen die richtigen Werte geben immer.

+0

Ich wünschte, ich könnte es tun, ohne ein 'Button' zu erstellen, und nur durch Berechnung der System UI-Metriken und Messung des Textes, um unnötige Erstellung von Objekten zu vermeiden. Aber wenn das nicht möglich oder sehr schwierig ist, denke ich, dass dies eine schnelle und einfache Lösung ist. Wenn Sie darüber nachdenken, würde die Erstellung eines unsichtbaren Knopfes die Leistung kaum beeinflussen. Vielen Dank. –

+0

Theoretisch können wir berechnen, ohne auch 'Button' zu erzeugen. Aber dafür brauchen wir 'Paint'-Objekte mit derselben 'Typeface',' Font Size' und anderen UI-Einstellungen, um den exakten Platz zu messen, der durch den Text und die genauen Werte für 'paddings' und' margins' belegt ist. Weil ** -Buttons Padding im Standard-Stil haben **, so dass nur Text mit 'Paint' gemessen wird, gibt es keine richtigen Werte. Aber wie du schon sagtest, kann das Erstellen von Buttons einen kleinen Einfluss auf die Performance haben, wenn du etwas mehr Speicher benötigst (es hängt davon ab, wie oft du berechnst), trotzdem glaube ich, dass es einfacher ist. – Rehan