2010-11-11 4 views
0

Существует список адаптер:высота ListView (фактическая)

public class timetable_list_adapter extends BaseAdapter 
{ 
... 
} 

и динамические добавленные списки:

timetable_list_adapter adapter = new timetable_list_adapter(getApplicationContext(), eventList); 
week_day_list.setAdapter(adapter); 

список элемент TableLayout

<TableLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/item_root_table" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:stretchColumns="2"> 

В результате роста приложений из ListViews неправильно. Я попытался установить высоту:

enter code hep = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT , ViewGroup.LayoutParams.MATCH_PARENT); 
TableLayout tl = (TableLayout)findViewById(R.id.item_root_table); 
p.height = 60 * eventList.size(); // INFO: change it after list_itemre 

Он работает, НО! на другом экране (меньше моего) списки слишком велики. Что мне делать?

+0

Классы Java и переменные обычно определяются в CamelCase. timetable_list_adapter должен быть TimetableListAdapter – Falmarri

ответ

2
p.height = 60 * eventList.size(); 

Это абсолютные пиксели, в зависимости от плотности экрана они будут иметь неправильный размер.

Попробуйте это:

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);  
DisplayMetrics metrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(metrics); 

p.height = 60 * eventList.size() * metrics.density; 

Это превратит абсолютные пиксели в плотности независимых пикселей (DIP), поэтому она должна быть такой же физический размер на каждом экране.

+0

благодарит за ответ! оно работает! – skkap

Смежные вопросы