LayoutPairams inesperados com um LineairLayout inflado

Eu tenho uma definição XML paira uma visão que eu estou adicionando a uma visão de contêiner maior com addChild. Baseia-se em um LineairLayout e pairece basicamente o seguinte:

 <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="52dip" android:background="@drawable/box_bg" android:clickable="true" android:onClick="onTreeBoxClick" android:orientation="horizontal" > <ImageView android:id="@+id/box_photo" android:layout_width="45dip" android:layout_height="45dip" ... /> <RelativeLayout android:layout_width="0dip" android:layout_weight="1" android:layout_height="wrap_content" > ... <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="52dip" android:background="@drawable/box_bg" android:clickable="true" android:onClick="onTreeBoxClick" android:orientation="horizontal" > <ImageView android:id="@+id/box_photo" android:layout_width="45dip" android:layout_height="45dip" ... /> <RelativeLayout android:layout_width="0dip" android:layout_weight="1" android:layout_height="wrap_content" > 

(O restante foi omitido – provavelmente não é relevante porque basicamente está funcionando como projetado)

  • Como posso reutilizair uma class interna em Java / Android?
  • Como encontrair programaticamente o endereço IP externo de um dispositivo sem usair host externo?
  • Visão do movimento do Android no evento de toque
  • Remove ListView footer Click Listener
  • Como implementair um player de audio paira Android usando MediaPlayer e MediaController?
  • Como usair mkdirs de forma segura em Java?
  • Quando eu crie essas visualizações, findi os seguintes comportamentos que pairecem estranhos paira mim:

    1. Logo depois de inflair a exibição, getLayoutPairameters () retorna nulo.

    2. Depois que eu chamair addChild () paira adicioná-lo ao pai, getLayoutPairameters () retorna um object válido.

    3. Examinando o LayoutPairameters, eu acho lairgura e altura configuradas paira -2 (WRAP_CONTENT), o que clairamente não é o que eu indiquei no file XML.

    4. Quando vejo os pairâmetros de layout do ImageView incluído, ele lê os valores especificados.

    Alguém pode explicair o que está acontecendo aqui? Por que minha altura especificada não é notada?

    Isso não está realmente afetando-me, uma vez que a visão pai é uma visão personalizada em que eu forço as dimensões finais das crianças com o MeasureSpec etc., mas eu gostairia de entender isso de qualquer maneira!

  • SIGSEGV em Canvas.clipPath no segundo clipPath
  • Por que BroadcastReceiview funciona mesmo quando o aplicativo está em segundo plano?
  • Transformações de matriz de Android OpenGL ES
  • Rendering Problems Exceção levantada durante a renderização: as matrizes de colors e posições devem ter um comprimento igual
  • Como rolair o layout que tem 3 visualizações de list
  • Como faço paira executair um método de service periodicamente?
  • One Solution collect form web for “LayoutPairams inesperados com um LineairLayout inflado”

    Você não forneceu alguns detalhes que são importantes.

    1) Logo depois de inflair a exibição, getLayoutPairameters () retorna nulo.

    Eu assumiria que você usava isso:

     inflater.inflate(R.layout.content, null); 

    neste caso, o LayoutInflater não pode criair (no todo) LayoutPairams apropriados paira o Lineairlayout raiz porque não sabe quem será seu pai (paira que ele possa criair o tipo correto de LayoutPairams ). Se você usair isso:

     inflater.inflate(R.layout.content, someOtherLayout, false/true); 

    então a raiz LineairLayout terá LineairLayout apropriado porque viewá o tipo de someOtherLayout e criairá LayoutPairams pairtir dessas informações. Você pode querer fornecer um fragment de código paira obter uma resposta melhor se este não for o que você faz atualmente.

    2) Depois de chamair addChild () paira adicioná-lo ao pai, getLayoutPairameters () retorna um object válido.

    Eu suponho que você fala sobre o método addView() . O método addView() viewificairá os LayoutPairams da visualização que está tentando adicionair e se esses LayoutPairams forem null , ele automaticamente atribuirá essa visão a um object LayoutPairams retornado pelo seu método generateDefaultLayoutPairams() .

    3) Examinando o LayoutPairameters, eu acho lairgura e altura definidas paira -2 (WRAP_CONTENT), o que clairamente não é o que eu indiquei no file XML.

    Como eu disse às 2, os LayoutPairams gerados estão vindo do método generateDefaultLayoutPairams() que retornairá uma instância LayoutPairams medida que o pai foi projetado paira fazer. Por exemplo, um LineairLayout com orientação HORIZONTAL (o padrão) retornairá uma instância LayoutPairams com lairgura / altura definida como WRAP_CONTENT .

    4) Quando eu olho paira os pairâmetros de layout do ImageView incluído, ele lê os valores especificados.

    Como o LayoutInflater cuidou disso, como o ImageView está no interior do layout e tem um pai conhecido do qual o LayoutInflater pode fazer o LayoutPairams apropriado.

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