2012-02-24 15 views
16

esto debería ser algo muy fácil de hacer, pero parece que es muy complicado. En mi código tengo unas pocas cosas ListView:Establecer la altura del elemento ListView

<ListView android:id="@+id/sums_list" android:layout_width="fill_parent" 
     android:layout_height="0dp" android:layout_weight="1" android:dividerHeight="0dp"></ListView> 

que se rellena con una ArrayAdapter que utiliza este punto de vista:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:cdpb="http://schemas.android.com/apk/res/ale.android.brainfitness" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="55dp"> 
... 
</LinearLayout> 

Por qué no es el elemento 55dp alta?

Gracias a todos

+0

Por qué 'androide: layout_height = "0DP"'? –

+1

¿Qué está pasando realmente? ¿Estás viendo los artículos pero con la altura incorrecta? ¿No estás viendo ningún artículo? No hay nada obviamente mal con lo que ha publicado, pero ver su adaptador y saber lo que está viendo ahora sería útil. –

+0

@Secator el 0dp define si el peso se aplicará a la altura o al ancho. entonces en este ejemplo, el peso de 1 se aplicará a la altura, ya que se establece en 0dp. –

Respuesta

61

¿Cómo está inflando la vista?

Si está configurando el parámetro 'principal' como nulo como a continuación, los parámetros de diseño se ignoran.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    View v = inflater.inflate(R.layout.filtered_trip_row, null); 
    … 

    return v; 
} 

Pasar 'parent' a inflar debería funcionar como esperaba.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    View v = inflater.inflate(R.layout.filtered_trip_row, parent); 
    … 

    return v; 
} 

Esto explica en detalle: Why does LayoutInflater ignore the layout_width and layout_height layout parameters I've specified?

para evitar ser UnsupportedOperationException, puede agregar false como parámetro de entrada a la inflator. Ejemplo:

inflater.inflate(R.layout.filtered_trip_row, parent, false) 
+0

Gracias Amol, no podía darle sentido a LayoutInflater, ahora está claro. Podría hacerlo funcionar y, sobre todo, entendí por qué funciona así. Muchas gracias – user449689

+1

si recibe una operación no compatible: revise esto: LinearLayout.LayoutParams params = new LinearLayout.LayoutParams (mDisplayWidth/3, 30); \t \t \t convertView.setLayoutParams (params); – cV2

+11

@Amol Brid, obtengo el error 'java.lang.UnsupportedOperationException: addView (View, LayoutParams) no se admite en AdapterView ' –

9
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    View v = inflater.inflate(R.layout.filtered_trip_row, parent,false); 
    … 

    return v; 
} 

sólo tiene que pasar valor booleano con el método de modo que agregar la yourrowlayout a la vista de lista y no dará futher error como java.lang.UnsupportedOperationException error: addView (Ver, LayoutParams) no se admite en AdapterView

y añadir yourLayout que u quiere llenar a través del adaptador

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:cdpb="http://schemas.android.com/apk/res/ale.android.brainfitness" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="55dp"> 
... 
</LinearLayout> 

funciona para mí y yo thi nk puede ayudarle a

+1

Esto funciona mejor que la respuesta aceptada. ¡Gracias! – Sunkas

0
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:minHeight="60dp" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:gravity="center" 
    android:weightSum="1" 
    android:background="@color/main_color"> 

    <ImageView 
     android:id="@+id/img_left_menu" 
     android:layout_weight="0.4" 
     android:focusable="false" 
     android:maxHeight="50dp" 
     android:maxWidth="50dp" 
     android:minHeight="50dp" 
     android:minWidth="50dp" 
     android:layout_width="0dp" 
     android:scaleType="centerInside" 
     android:adjustViewBounds="true" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@+id/tx_left_menu" 
     android:layout_width="0dp" 
     android:textSize="18dp" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="0.6" 
     android:singleLine="true" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     /> 
</LinearLayout> 

en el adaptador de establecer la matriz como se describe anteriormente

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    View v = inflater.inflate(R.layout.filtered_trip_row, parent,false); 
    … 

    return v; 
} 
Cuestiones relacionadas