Ich codiere eine benutzerdefinierte Ansicht, die von RelativeLayout erweitert wurde, und möchte die Größe programmgesteuert ändern. Wie kann ich das tun?
Die benutzerdefinierte Ansichtsklasse ist ungefähr so:
public ActiveSlideView(Context context, AttributeSet attr){
super(context, attr);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(inflater != null){
inflater.inflate(R.layout.active_slide, this);
}
Problem gelöst!
HINWEIS: Verwenden Sie unbedingt die übergeordneten Layouts
LayoutParams
. Meins istLinearLayout.LayoutParams
!quelle
RelativeLayout.LayoutParams?
private void resizeView(View view, int newWidth, int newHeight) { try { Constructor<? extends LayoutParams> ctor = view.getLayoutParams().getClass().getDeclaredConstructor(int.class, int.class); view.setLayoutParams(ctor.newInstance(newWidth, newHeight)); } catch (Exception e) { e.printStackTrace(); } }
Das funktioniert bei mir:
quelle
Nehmen wir an, Sie wollten die Größe der Ansicht in geräteunabhängigen Pixeln ( dp ) ändern : -
Sie müssen eine Methode namens verwenden
applyDimension
, die Mitglied der Klasse istTypedValue
, um von Pixeln in dps zu konvertieren. Wenn ich also die Höhe auf 150 dp einstellen möchte (sagen wir), dann könnte ich das tun:wobei der Ausdruck:
getResources().getDisplayMetrics()
die Bildschirmdichte / Auflösung erhältquelle
float pixels = context.getResources().getDimensionPixelSize(R.dimen.card_height);
In Kotlin können Sie die ktx-Erweiterungen verwenden :
quelle
versuchen Sie es mit diesem:
quelle
Hier ist eine allgemeinere Version der obigen Lösung von @herbertD:
quelle
Ich habe diese Methode verwendet, um die Breite der benutzerdefinierten Ansicht zu erhöhen
quelle
Ich habe es auf diese Weise gelöst. Ich habe im Grunde eine einfache Ansicht in der XML-Datei.
quelle
https://stackoverflow.com/q/44259342/6596724
Wenn Sie nur
two or three condition(sizes)
dann haben, können Sie @OverideonMeasure
wie verwendenquelle
Wenn Sie überschreiben
onMeasure
, vergessen Sie nicht, die neuen Größen zu aktualisierenquelle
So habe ich das erreicht. In der Antwort von Sileria hat er / sie Folgendes getan:
Dies ist richtig, aber es wird erwartet, dass wir die Höhe angeben
pixels
, aber ich wolltedp
die Höhe angeben, also möchte ich hinzufügen:So wird es aussehen:
quelle
Das habe ich getan:
Wenn es eine Ansichtsgruppe gibt, zu der diese Ansicht gehört, müssen Sie möglicherweise auch yourViewGroup.requestLayout () aufrufen, damit sie wirksam wird.
quelle