Je suis en train de coder une vue personnalisée, étendue de RelativeLayout, et je souhaite la redimensionner par programmation, comment puis-je faire?
la classe de vue personnalisée est quelque chose comme:
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);
}
Problème résolu!
REMARQUE: assurez-vous d'utiliser la mise en page parent
LayoutParams
. Le mien estLinearLayout.LayoutParams
!la source
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(); } }
Cela fonctionne pour moi:
la source
Pour ce que ça vaut, disons que vous vouliez redimensionner la vue en pixels indépendants de l'appareil ( dp ): -
Vous devez utiliser une méthode appelée
applyDimension
, qui est membre de la classeTypedValue
pour convertir des pixels en dps. Donc, si je veux régler la hauteur à 150dp (disons) - alors je pourrais faire ceci:où l'expression:
getResources().getDisplayMetrics()
obtient la densité / résolution de l'écranla source
float pixels = context.getResources().getDimensionPixelSize(R.dimen.card_height);
Dans Kotlin, vous pouvez utiliser les extensions ktx :
la source
essayez celui-ci:
la source
Voici une version plus générique de la solution ci-dessus de @herbertD:
la source
J'ai utilisé cette méthode pour augmenter la largeur de la vue personnalisée
la source
Je l'ai résolu de cette façon .. J'ai fondamentalement une vue simple à l'intérieur du fichier xml.
la source
https://stackoverflow.com/q/44259342/6596724
Si vous avez seulement,
two or three condition(sizes)
vous pouvez utiliser @OverideonMeasure
commela source
si vous remplacez
onMeasure
, n'oubliez pas de mettre à jour les nouvelles taillesla source
C'est ainsi que j'ai réalisé cela. Dans réponse de Sileria, il / elle a fait ce qui suit:
C'est correct, mais il s'attend à ce que nous donnions la hauteur en
pixels
, mais je voulais donnerdp
la hauteur que je veux donc j'ai ajouté:Cela ressemblera donc à ceci:
la source
C'est ce que j'ai fait:
S'il existe un groupe de vues auquel appartient cette vue, vous devrez peut-être également appeler yourViewGroup.requestLayout () pour qu'il prenne effet.
la source