Android में ScrollView के अंदर ListView को सही ऊंचाई के साथ दिखाने का गाइड
यह ट्यूटोरियल दिखाता है कि कैसे ListView को ScrollView के अंदर रखकर उसके सभी आइटम दिखाए जाएं, क्योंकि डिफ़ॉल्ट रूप से ListView ScrollView में संकुचित (collapse) हो जाता है।
समस्या
ListView और ScrollView दोनों स्क्रॉल करने योग्य हैं। ScrollView ListView को माप नहीं पाता, इसलिए ListView की ऊंचाई 0 या एक आइटम तक सीमित हो जाती है।
समाधान: Helper क्लास से ListView की ऊंचाई सेट करें
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट फ़ाइल में कोड जोड़ें
res/layout/activity_main.xml में:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://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="hello_world" />
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</ScrollView>
चरण 3: MainActivity.java
package com.example.sample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
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 = findViewById(R.id.listView);
myList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listview_array));
Helper.getListViewSize(myList);
}
}
चरण 4: Helper.java क्लास
package com.example.sample;
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);
Log.i("height of listItem:", String.valueOf(totalHeight));
}
}
चरण 5: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
बेहतर आधुनिक विकल्प
नए ऐप्स के लिए NestedScrollView + RecyclerView उपयोग करें जिसमें setNestedScrollingEnabled(false) सेट हो, या पूरी तरह से RecyclerView में हेडर/फुटर जोड़ें (विभिन्न व्यू टाइप के साथ)।
ऐप चलाएं
डिवाइस कनेक्ट करें, Run आइकन पर क्लिक करें और ScrollView के अंदर पूरी ListView देखें।