Intereting Posts
Google Glass не входит в число Android-устройств от ADB Android Gradle plugin 0.7.0: «дубликаты файлов при упаковке APK» Как добавить водяной знак в виджет Android EditText? Сбросить панель действий после использования SearchView Как вставить медиаплеер VLC в мое приложение для Android Android: отладка ядра с помощью KGDB Чтение определенного файла из sdcard в android Android: несколько одновременных таймеров обратного отсчета в ListView Почему Bitmap to Base64 String показывает черный фон на веб-обозревателе в Android? Поддержка Android – Hindi Conjuncts? Как установить различное приложение для каждой комбинации вкуса с использованием flavorDimensions? Как обнаружить движение устройства Android? Обработка кадров камеры Android в режиме реального времени Branch.io deeplink в android открывает Play Store даже независимо от того, что Пользовательский глобальный класс приложения разбивается на "android.app.Application не может быть отброшен в"

Как прокрутить макет, который имеет 3 вида списка

У меня есть один макет. Этот макет содержит 3 вида списка с высотой данных wrap_content в Listview, но не исправлены. Когда у Listview есть огромные данные литеатра, в это время данные идут снизу и данные не могут видеть, поэтому я хочу прокрутить представление со всеми тремя списками, как это возможно.

У кого-нибудь есть идея об этом?

Это мое мнение, которое содержит 3 Listview, теперь это с меньшим количеством данных, но когда данные будут огромными в то время, у последнего Listview возникнут проблемы для просмотра. Я хочу прокрутить серый цвет …

Введите описание изображения здесь

Solutions Collecting From Web of "Как прокрутить макет, который имеет 3 вида списка"

Используйте линейный макет вместо списка в вашем XML-файле. Это ваш xml-файл.

<?xml version="1.0" encoding="utf-8"?> <ScrollView android:id="@+id/scr" android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="fill_parent" android:id="@+id/r2" android:orientation="vertical" android:layout_height="fill_parent" android:paddingTop="100dip" android:paddingBottom="100dip"> <LinearLayout android:layout_width="fill_parent" android:id="@+id/l1" android:orientation="vertical" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:background="#00B2EE"> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:id="@+id/l2" android:orientation="vertical" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:background="#00EE76"> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:id="@+id/l3" android:orientation="vertical" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:background="#7171C6"> </LinearLayout> </LinearLayout> </ScrollView> 

И поместите другой xml, который будет завышен списком.

Это ваш основной класс активности.

 package com.list.add; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; public class NewlistActivity extends Activity { /** Called when the activity is first created. */ LinearLayout l1,l2,l3; ScrollView scrollView; ViewGroup contentView; List<String> list = new ArrayList<String>(); List<String> list1 = new ArrayList<String>(); List<String> list2 = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); l1 = (LinearLayout) findViewById(R.id.l1); l2 = (LinearLayout) findViewById(R.id.l2); l3 = (LinearLayout) findViewById(R.id.l3); scrollView = (ScrollView) findViewById(R.id.scr); contentView = (ViewGroup) findViewById(R.id.r2); scrollView.setOnTouchListener(new ScrollPager(scrollView, contentView)); scrollView.post(new Runnable() { public void run() { scrollView.scrollTo(0, contentView.getPaddingTop()); } }); list.add("Parth"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Parth"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Shah"); list.add("Parth"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Parth"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Chirag"); list.add("Shah"); list1.add("Parth"); list1.add("Parth"); list1.add("Parth"); list1.add("Parth"); list1.add("Parth"); list1.add("Parth"); list2.add("Kalpesh"); list2.add("Kalpesh"); list2.add("Kalpesh"); list2.add("Kalpesh"); list2.add("Kalpesh"); list2.add("Kalpesh"); list2.add("Kalpesh"); System.out.println(list); System.out.println(list1); System.out.println(list2); for (int i=0; i<list.size(); i++) { LayoutInflater inflater = getLayoutInflater(); View vi = inflater.inflate(R.layout.raw, null); TextView tv = (TextView) vi.findViewById(R.id.textView1); tv.setText(list.get(i)); l1.addView(vi); } for (int i=0; i<list1.size(); i++) { LayoutInflater inflater = getLayoutInflater(); View vi = inflater.inflate(R.layout.raw, null); TextView tv = (TextView) vi.findViewById(R.id.textView1); tv.setText(list1.get(i)); l2.addView(vi); } for (int i=0; i<list2.size(); i++) { LayoutInflater inflater = getLayoutInflater(); View vi = inflater.inflate(R.layout.raw, null); TextView tv = (TextView) vi.findViewById(R.id.textView1); tv.setText(list2.get(i)); l3.addView(vi); } } } 

И сделать один класс скроллера следующим образом:

 public class ScrollPager implements OnTouchListener public ScrollPager(ScrollView aScrollView, ViewGroup aContentView) { mScrollView = aScrollView; mContentView = aContentView; scroller = new Scroller(mScrollView.getContext(), new OvershootInterpolator()); task = new Runnable() { public void run() { scroller.computeScrollOffset(); mScrollView.scrollTo(0, scroller.getCurrY()); if (!scroller.isFinished()) { mScrollView.post(this); } } }; } public boolean onTouch(View v, MotionEvent event) { // Stop scrolling calculation. scroller.forceFinished(true); // Stop scrolling animation. mScrollView.removeCallbacks(task); if (event.getAction() == MotionEvent.ACTION_UP) { 

Вы должны использовать атрибут weight android:layout_weight="1" в каждом ListView в XML-макете. Чтобы он разделил экран с равным пространством для каждого списка, и ваша прокрутка будет работать для каждого ListView.

Если вы представляете материал в вертикальном или горизонтальном стеке, вы должны использовать LinearLayout а затем использовать атрибут layout_weight для управления пропорциями отдельных строк / столбцов в контейнере.

Если вы хотите размер экрана, установите layout_width и layout_height для fill_parent иначе вы не получите все доступные размеры экрана. Если вы попытаетесь использовать wrap_content для высоты, все рухнет, если вы не прибегнете к дополнительным ограничениям макета, например minHeight .

Мы используем это везде, и он достаточно надежный. Для трех предметов вы можете использовать 1/1/1 или 3/3/3 .

Веса также не должны быть равны! Вы можете разделить пропорции любым способом; Веса – это только относительные отношения всего диапазона (ширина / высота). Например, если вы хотите, чтобы средний элемент в два раза превышал размер, используйте 1/2/1 ; Если вы хотите, чтобы 40% использовали 30/40/30 или 3/4/3 .

Хорошим «трюком» является использование layout_weight = 1 на ровно одну строку / столбец (другие по умолчанию равны нулю), и он будет «заполнять» любое оставшееся пространство. Это общий макет сценария.

Если вам нужно прокручивать стек, вы можете поместить его в ScrollView . В этом случае вы должны установить layout_height из LinearLayout в wrap_content , и вы будете подвергнуты свертыванию в зависимости от прихоти системы макета (это означает, что вам нужно использовать ограничения min / max).

Вместо этого позвольте мне дать наилучшую идею для реализации такого же типа.

Вы когда-нибудь думали использовать ExpandableListView для такой же реализации? Просто покажите элемент 1-й группы как расширенный и сделайте другие 2 группы свернутыми, просто разверните их, когда пользователь нажимает на определенную группу.

Вот несколько примеров для этого:

  1. http://techdroid.kbeanie.com/2010/09/expandablelistview-on-android.html
  2. http://coderzheaven.com/2011/04/expandable-listview-in-android-using-simpleexpandablelistadapter-a-simple-example/

Я уверен, что эта идея не очень хорошая, но если вы ее реализуете, вы обязательно найдете полезную информацию в своем случае.

Используйте этот метод, и ваш список будет прокручиваться внутри scrollview: –

 ListView lstNewsOffer.setAdapter(new ViewOfferAdapter( ViewNewsDetail.this, viewOfferList)); getListViewSize(lstNewsOffer); void getListViewSize(ListView myListView) { ListAdapter myListAdapter = myListView.getAdapter(); if (myListAdapter == null) { // do nothing return null return; } // set listAdapter in loop for getting final size 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(); } // setting listview item in adapter 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)); 

}