Estou codificando uma exibição personalizada, estendida de RelativeLayout, e quero redimensioná-la programaticamente. Como posso fazer?
a classe de visualização personalizada é algo como:
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);
}
Problema resolvido!
NOTA: Certifique-se de usar os Layout dos pais
LayoutParams
. O meu éLinearLayout.LayoutParams
!fonte
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(); } }
Isso funciona para mim:
fonte
Pelo que vale, digamos que você queira redimensionar a exibição em pixels independentes do dispositivo ( dp ): -
Você precisa usar um método chamado
applyDimension
, que é membro da classeTypedValue
para converter de pixels em dps. Então, se eu quiser definir a altura para 150dp (digamos) - então eu poderia fazer isso:onde a expressão:
getResources().getDisplayMetrics()
obtém a densidade / resolução da telafonte
float pixels = context.getResources().getDimensionPixelSize(R.dimen.card_height);
No Kotlin, você pode usar as extensões ktx :
fonte
tente este:
fonte
Aqui está uma versão mais genérica da solução acima em @herbertD:
fonte
Usei dessa maneira para aumentar a largura da visualização personalizada
fonte
Eu resolvi desta maneira .. Eu tenho basicamente uma visão simples dentro do arquivo xml.
fonte
https://stackoverflow.com/q/44259342/6596724
Se você tiver apenas
two or three condition(sizes)
, poderá usar o @OverideonMeasure
comofonte
se você estiver substituindo
onMeasure
, não se esqueça de atualizar os novos tamanhosfonte
Foi assim que consegui isso. Na resposta Sileria, ele / ela fez o seguinte:
Isso está correto, mas espera que demos a altura
pixels
, mas eu queria dar o quedp
eu queria que fosse, então adicionei:Então será assim:
fonte
Isto é o que eu fiz:
Se houver um grupo de visualizações ao qual essa visualização pertence, também será necessário chamar yourViewGroup.requestLayout () para que ela entre em vigor.
fonte