آموزش قرار دادن listview در scrollview
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش قرار دادن listview در scrollview در برنامه نویسی اندروید خواهیم پرداخت همانطور که می دانید به طور معمول قرار دادن listview در scrollview ندارد و ما باید یک کلاس سفارشی یا کمکی ایجاد کنیم تا زمانی که طول listview به پایان می رسد scroll مربوط به listview از کار افتاده و scrollview اصلی به کار افتد در ادامه با ما همراه باشید.
همانطور که گفتم باید یک کلاس کمی یا سفارشی ایجاد کنیم.
پس یک فایل جاوا به نام Helper.java ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package ir.programchi; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; public class Helper { public static void getListViewSize(ListView myListView) { ListAdapter myListAdapter = myListView.getAdapter(); if (myListAdapter == null) { return; } int totalHeight = 0; for (int size = 0; size < myListAdapter.getCount(); size++) { View listItem = myListAdapter.getView(size, null, myListView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = myListView.getLayoutParams(); params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1)); myListView.setLayoutParams(params); // print height of adapter on log Log.i("height of listItem:", String.valueOf(totalHeight)); } } |
در بالا ما باید سایز کل listview را به دست بیاریم تا scrollview اصلی ما تا اینجا کار نکند سپس بعد از اینکه scroll درون listview تمام شد بیایم و scrollview اصلی را به کار بیندازیم برای این منظور طول کل listview در ابتدا با استفاده از این کد به دست می آید.
در layout اصلی خود که در اینجا نام آن برابر با main.xml است کد زیر را قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="19dp" android:text="Programchi.ir" /> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/ic_launcher" /> <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </ScrollView> |
در بالا ابتدا یک Scrollview قرار گرفته است سپس در آن اجزای مختلفی مانند TextView , ImageView و ListView قرار گرفته است.
سپس وارد اکتیویتی اصلی شده در اینجا نام آن برابر با MainActivity.java است و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.example.scrollviewlistviewdemo; import android.os.Bundle; import android.app.Activity; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { private String listview_array[] = { "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN" }; ListView myList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myList = (ListView) findViewById(R.id.listView); myList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array)); Helper.getListViewSize(myList); } } |
در آخر هم یکسری داده sample در listView لود شده ولی یه تفاوت این listView دارد ما از کلاسی که درست کردیم (Helper) استفاده کرده ایم تا scroll نیز انجام شود.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام خدا قوت
می تونید با کتابخانه زیر هم این کارو به راحتی بکنید
‘com.github.paolorotolo:expandableheightlistview:1.0.0’
ممنون از اطلاع رسانی
سلام
ممنون از آموزشهای خوبتون
یه سوال جدا از موضوع آموزش داشتم.
برای تقسیم بندی منظم صفحه در xml که توی همه سایز گوشیها نسبت ها ثابت بمونه از چه روشی میشه استفاده کرد؟
من از وزن دهیه view ها استفاده میکنم. layout_weight
اما اندروید استدیو وارنینگ خوب نبودن پرفورمنس اینکارو میده. راه دیگهای داره؟
سلام
خواهش می کنم.
شما باید از minWidth و minHeight استفاده کنید ویژگی های نام برده شده برای تعیین کردن کمترین مقدار طول عرض هر widget هست هر widget در گوشی های معمولی 4×4 و در tablet های معمولی 8×7 است .عکس زیر را مشاهده کنید که به شکلی اندازه ها تنظیم شده است.
به جدول زیر نگاهی بیندازید
(Columns or Rows)
(
minWidth
orminHeight
)جدول اندازه هر cell یا سلول را تنظیم می کند برای محاسبه آن در گوشی باید همانند فرمول زیر عمل کنید.
minWidth = 144dp + (2 × 8dp) + (2 × 56dp) = 272dp
minHeight = 48dp + (2 × 4dp) = 56dp
موفق باشید.