2015-11-22 6 views
1

Мой списокView содержит 7 элементов. Я хочу, чтобы эти 7 элементов перекрывали все пространство устройства.Предметы ListView не занимают должное пространство устройства

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context=".DaysList"> 


     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/listView" 
      android:layout_gravity="center_vertical" 
      > 


     </ListView> 
    </LinearLayout> 

Мой OnCreate() метод:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      //setContentView(R.layout.activity_main); 

      ListView listView=getListView(); 

      listView.setBackgroundColor(Color.GREEN); 

      String[] values = new String[] { "Monday", "Tuesday", "Wednesday", 
        "Thursday","Friday", "Saturday","Sunday" }; 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, values); 



      setListAdapter(adapter); 
    } 

Ожидаемый результат: enter image description here

Фактический выход: enter image description here

+1

Вы должны использовать вертикальный LinearLayout с layout_weight, а не ListView, если у вас всегда есть 7 элементов – fractalwrench

+0

Вы пытались изменить layout_height of lis tview от "match_parent" до "wrap_content"? –

+0

@fractalwrench я использовал android: ориентация = вертикальная, все тот же результат. –

ответ

0

Если у вас есть фиксированные элементы подсчитывать, вам не нужен ListView, но простое линейное расположение с 7 TextViews в вашем случае и установить вес для высоты TextViews как:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="7"> 

    <TextView 
     android:id="@+id/tv_monday" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:text="Monday" /> 

    <TextView 
     android:id="@+id/tv_tuesday" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:text="Tuesday" /> 

    ... 

</LinearLayout> 
0

Вы можете создать собственный адаптер, который измеряет высоту экрана устройства и распространяющийся элементы

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:id="@+id/linear_layout" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".DaysList"> 
    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listView"/> 
</LinearLayout> 

MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setBackgroundColor(Color.GREEN); 

    String[] values = new String[]{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; 

    final ArrayAdapter<String> adapter = new Adapter(this, android.R.layout.simple_list_item_1, values); 
    listView.setAdapter(adapter); 
} 

Adapter.java

public class Adapter extends ArrayAdapter<String> { 

    Context context; 
    public Adapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
     this.context = context; 
    } 

    public Adapter(Context context, int resource, String[] items) { 
     super(context, resource, items); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     int fullHeight = parent.getHeight(); 
     int itemHeight = fullHeight/getCount() ; 

     ViewGroup.LayoutParams lp = view.getLayoutParams(); 
     lp.height = itemHeight; 
     view.setLayoutParams(lp); 

     return view; 
    } 
} 
+0

Я пробовал ваш код, он не работает –

+0

Я обновил свой ответ. Не понял ваш вопрос. Мое редактирование даст вам «скрыть все пространство устройства». Надеюсь, поможет – woley

0

По умолчанию ListView содержит в ScrollView, который имеет бесконечную высоту. Поэтому, даже если вы только объявляете listView в качестве содержимого для переноса, он заполнит все, пока в вашем примере будет пустое пространство. Вы можете это исправить, вызвав этот метод после настройки адаптера:

public boolean setListViewHeight(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter != null) { 

     int numberOfItems = listAdapter.getCount(); 

     View item = listAdapter.getView(0, null, listView); 
     item.measure(0, 0); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, numberOfItems * item.getMeasuredHeight()); 
     listView.setLayoutParams(params); 

     return true; 

    } else { 
     return false; 
    } 
} 

Перед:

enter image description here

После:

enter image description here