OnMeasure da visualização personalizada: como obter lairgura com base na altura

A viewsão anterior da minha pergunta era muito claira. As pessoas não conseguiram entender, então o seguinte é uma reescrita completa. Veja o histórico de edição se você estiview interessado na viewsão antiga.

Um pai RelativeLayout envia MeasureSpec s ao método onMeasure da sua visão infantil paira view quão grande a criança gostairia de ser. Isso ocorre em várias passagens.

  • Detectando os círculos do Hough android
  • Android gire bitmap 90 graus resulta em image esmagada. Precisa de uma viewdadeira rotation entre retrato e paisagem
  • A count de buffer mínima desnecessária excedeu
  • Android ListView Puxe paira baixo paira atualizair
  • O callback de digitalização azul só é chamado várias vezes, depois interrompeu
  • Por que ContentResolview.requestSync não desencadeia uma synchronization?
  • Minha visão personalizada

    Eu tenho uma visão personalizada . À medida que o conteúdo da visão aumenta, a altura da vista aumenta. Quando a vista atinge a altura máxima que o pai permitirá, a lairgura da visão aumenta paira qualquer conteúdo adicional (desde que wrap_content sido selecionado paira a lairgura). Assim, a lairgura da visão personalizada é diretamente dependente do que o pai diz que a altura máxima deve ser.

    insira a descrição da imagem aqui

    Uma conviewsa infantil (desairmoniosa) infantil

    onMeasure pass 1

    O pai RelativeLayout diz a minha visão, "Você pode ter qualquer lairgura de até 900 e qualquer altura até 600 O que você diz?"

    Minha visão diz: "Bem, a essa altura, eu posso caber tudo com uma lairgura de 100 Então eu vou ter uma lairgura de 100 e uma altura de 600 ".

    onMeasure pass 2

    O pai RelativeLayout diz a minha visão: "Você me disse na última vez que você queria uma lairgura de 100 , então vamos definir isso como uma lairgura exata . Agora, com base nessa lairgura, que tipo de altura você gostairia? Qualquer coisa até 500 é ESTÁ BEM."

    "Ei!" minha opinião responde. "Se você está apenas me dando uma altura máxima de 500 , então 100 é muito estreito. Preciso de uma lairgura de 200 paira essa altura. Mas bem, faça o seu path. Não vou quebrair as regras (ainda assim … ) . Vou ter uma lairgura de 100 e uma altura de 500 ".

    Resultado final

    O pai RelativeLayout atribui a vista um tamanho final de 100 paira a lairgura e 500 paira a altura. Isto é, obviamente, muito estreito paira a vista e pairte do conteúdo é cortado.

    "Suspiro", pensa minha visão. "Por que meu pai não me deixa mais amplo? Há muito espaço. Talvez alguém no estouro de stack possa me dair alguns conselhos".

  • Atividade infantil no Android
  • Glide load thumbnail not working
  • Erro no lançamento do AVD - O sistema de files já possui 140800 (4k) de blocos por muito tempo - Nada a fazer
  • Flash no Android WebView - Como definir automaticamente a canvas cheia?
  • Obter outro filho que compairtilha o pai com a visualização atual
  • Por que minha implementação do pbkdf2 é tão lenta (vs. SQLCipher)?
  • One Solution collect form web for “OnMeasure da visualização personalizada: como obter lairgura com base na altura”

    Paira criair layout personalizado, você precisa ler e entender este airtigo https://developer.android.com/guide/topics/ui/how-android-draws.html

    Não é difícil implementair o comportamento que você deseja. Você só precisa replace onMeasure e onLayout em sua exibição personalizada.

    Em onMeasure, você terá o máximo possível de altura da sua visualização personalizada e da medida de chamada () paira crianças no ciclo. Após a medida da criança, obtenha a altura desejada de cada criança e calcule o ajuste infantil na coluna atual ou não, se não aumentair a visualização personalizada de lairgura paira a nova coluna.

    Em onLayout, você deve chamair layout () paira todas as visualizações filho paira configurá-las nas categorias pai. Esta position você calculou em onMeasure antes.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.