2012-05-17 4 views
0

У меня есть то, что кажется моим Googling редким вопросом.Использование RelativeLayout для управления высотой строки ListView

У меня есть файл XML, который определяет, как должна выглядеть строка в моем ListView.

Поскольку я хочу видеть только одну строку за один раз, я переопределяю getCount адаптера, который отлично работает, показывая мне только одну строку. Проблема заключается в том, что, несмотря на мои настройки fill_parent, строка по-прежнему не заполняет экран.

Я пробовал много вещей, и ближе всего я устанавливаю RelativeLayout minHeight, но тогда он специфичен для размера экрана. Поэтому либо мои элементы неправильно настроены в RelativeLayout, либо мне нужен способ автоматической настройки minHeight на основе устройства.

Я бы предпочел сделать это в формате XML, но при необходимости можно было бы программно настроить его при запуске.

Это код для родительского контейнера:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:orientation="vertical"> 

    <ListView 
     android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

</RelativeLayout> 

и для строки XML:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_height="fill_parent"> 

    <ImageView 
     android:layout_width="60dp" 
     android:layout_height="30dp" 
     android:layout_alignParentLeft="true" 
     android:layout_marginTop="15dp" 
     android:layout_marginLeft="5dp" /> 

    <TextView 
     android:layout_centerHorizontal="true" 
     android:layout_width="185dp" 
     android:layout_height="25dp" 
     android:textSize="20sp" 
     android:layout_marginTop="15dp" 
     android:gravity="center" 
     android:inputType="none" /> 

    <ImageView 
     android:layout_width="60dp" 
     android:layout_height="30dp" 
     android:layout_alignParentLeft="true" 
     android:layout_marginTop="60dp" 
     android:layout_marginLeft="5dp" /> 


    <TextView 
     android:layout_centerHorizontal="true" 
     android:layout_width="185dp" 
     android:layout_height="25dp" 
     android:textSize="20sp" 
     android:layout_marginTop="60dp" 
     android:gravity="center" 
     android:inputType="none" /> 

    <TextView 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="35dp" 
     android:layout_width="95dp" 
     android:layout_height="50dp" 
     android:textSize="18dp" 
     android:layout_marginTop="110dp" 
     android:gravity="center" 
     android:inputType="none" /> 

    <org.gpgvm.widget.NumberPicker 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/btn_PrevLift" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="35dp" 
     android:layout_marginBottom="120dp"> 
    </org.gpgvm.widget.NumberPicker> 

    <TextView 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="35dp" 
     android:layout_width="95dp" 
     android:layout_height="50dp" 
     android:textSize="18dp" 
     android:layout_marginTop="110dp" 
     android:gravity="center" 
     android:inputType="none" /> 

    <org.gpgvm.widget.NumberPicker 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/btn_NextLift" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="35dp" 
     android:layout_marginBottom="120dp" > 
    </org.gpgvm.widget.NumberPicker> 

    <Button 
     android:layout_width="100dp" 
     android:layout_height="40dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="30dp" 
     android:layout_marginBottom="30dp" /> 

    <Button 
     android:layout_width="100dp" 
     android:layout_height="40dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="30dp" 
     android:layout_marginBottom="30dp" /> 

</RelativeLayout> 

ответ

1

получить высоту экрана устройства, используя код, приведенный ниже, и установить MinHeight динамично

DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     int mHeight = metrics.heightPixels; 
     int mWidth = metrics.widthPixels; 

RelativeLayout yourLayout= (RelativeLayout) findViewById(R.id.yourId); 
    RelativeLayout.LayoutParams newParams = new RelativeLayout.LayoutParams(mWidth, mHeight); 

    yourLayout.setLayoutParams(newParams); 
+0

OK кроме один noob вопрос. Как можно найти RelativeLayout. Можете ли вы использовать findViewById ...? Я имею в виду, что я предположил, что это было для просмотров, TextView, ImageView и т. Д. – GPGVM

+0

getLayoutParams(). Height = x; requestLayout(); или invalidate(); – Housefly

+0

Интересно. Я установил ListView как таковой: lstvw_LiftData.getLayoutParams(). Height = height; но это не сработает. Я предполагаю, что я не свернул до фактических параметров макета строки. – GPGVM