A documentação do Android diz que existem dois tamanhos para uma vista, as dimensões medidas e as dimensões do desenho . A dimensão medida é aquela calculada na passagem de medida (o método onMeasure ), enquanto as dimensões do desenho são o tamanho real na tela. Particularmente, a documentação diz que:
Esses valores podem, mas não necessariamente, ser diferentes da largura e altura medidas.
Então, minha pergunta é: o que poderia fazer a dimensão do desenho ser diferente da dimensão medida? Se o método onMeasure (int, int) respeitar os requisitos de layout (dados como os parâmetros widthMeasureSpec e heightMeasureSpec , como o SDK pode decidir que a visualização deve ter um tamanho de desenho diferente?
Além disso, como / onde no código-fonte do Android a largura / altura medida é usada para calcular a largura / altura do desenho? Tentei examinar o código-fonte do View , mas não consigo descobrir como a MeasWidth / Height é usada para calcular a largura / altura final. Talvez tenha algo a ver com o enchimento, mas não tenho certeza.
fonte
Respostas:
Como o nome sugere, a largura / altura medida é usada durante a fase de medição e layout.
Deixe-me dar um exemplo,
Um widget é solicitado a medir a si mesmo. O widget diz que deseja ter 200 px por 200 px. Esta é a largura / altura medida.
Durante a fase de layout, ou seja, no método onLayout. O método pode usar a largura / altura medida de seus filhos ou atribuir uma nova largura / altura chamando o método de layout da visualização.
digamos que o método onLayout chame childview.layout (0,0,150,150) agora a largura / altura da visualização é diferente da largura / altura medida.
Eu sugeriria não usar o método MeasuredWidth / height fora do onLayout.
para resumir.
além disso,
public void View.layout(int l, int t, int r, int b)
parece ser o lugar onde a atribuição de posição e tamanho acontece.
fonte