android listview display all available items without scroll with static header

前端 未结 12 527
一生所求
一生所求 2020-12-02 10:12

I\'m having a little difficulties while trying to get a certain layout to work: I want to have list. List does not have to be scrollable, but should be shown completely. But

相关标签:
12条回答
  • 2020-12-02 10:35

    If all items has the same height

            int totalItemsHeight = baseDictionaries.size() * item.getMeasuredHeight();
            int totalDividersHeight = listView.getDividerHeight() * (baseDictionaries.size() - 1);
            int totalPadding = listView.getPaddingBottom() + listView.getPaddingTop();
    
            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) listTranslationWords.getLayoutParams();
            lp.height = totalItemsHeight + totalDividersHeight + totalPadding;
            listTranslationWords.setLayoutParams(lp);
    
    0 讨论(0)
  • 2020-12-02 10:40

    Iam supprised no one see this.U cant have two scrolls on the same layout. 1st u have a scrollview and then u have a list, i bet u are killing some android good practices there.

    0 讨论(0)
  • 2020-12-02 10:40

    Set android:layout_height="fill_parent" in your LinearLayout

    0 讨论(0)
  • 2020-12-02 10:41

    I just did it using setting params of ListView

    public static void setListViewHeightBasedOnChildren(ListView listView) {
    
        //this comes from value from xml tag of each item
        final int HEIGHT_LARGE=75;
        final int HEIGHT_LARGE=50;
        final int HEIGHT_LARGE=35;
        ViewGroup.LayoutParams params = listView.getLayoutParams();
    
        int screenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
    
        switch(screenSize) {
    
        case Configuration.SCREENLAYOUT_SIZE_LARGE:
             params.height =(int) (HEIGHT_LARGE*size);
             break;
        case Configuration.SCREENLAYOUT_SIZE_NORMAL:
             params.height =(int) (HEIGHT_NORMAL*size);
             break;
        case Configuration.SCREENLAYOUT_SIZE_SMALL:
              params.height =(int) (HEIGHT_SMALL*size);
              break;
        }
        listView.setLayoutParams(params);  
    }
    
    0 讨论(0)
  • 2020-12-02 10:44

    I had a ListView in my layout and wanted to use a library which can't handle a ListView here because it wraps it into a ScrollView. The best solution for me is based on Fedor´s answer.

    Since I already got an ArrayAdapter for the ListView I wanted to re-use it:

    LinearLayout listViewReplacement = (LinearLayout) findViewById(R.id.listViewReplacement);
    NamesRowItemAdapter adapter = new NamesRowItemAdapter(this, namesInList);
    for (int i = 0; i < adapter.getCount(); i++) {
        View view = adapter.getView(i, null, listViewReplacement);
        listViewReplacement.addView(view);
    }
    

    For me this works fine because I just need to display dynamic data varying from 1 to 5 elements. I just had to add my own divider.

    0 讨论(0)
  • 2020-12-02 10:46

    The solution I used is to replace ListView with LinearLayout. You can create all your items inside LinearLayout, they will all be displayed. So there's really no need to use ListView.

    LinearLayout list = (LinearLayout)findViewById(R.id.list_recycled_parts);
    for (int i=0; i<products.size(); i++) {
      Product product = products.get(i);
      View vi = inflater.inflate(R.layout.product_item, null);
      list.addView(vi);
    }
    
    0 讨论(0)
提交回复
热议问题