Intereting Posts
Как объединить два APK в один, чтобы оба приложения могли быть установлены одновременно Android – Почему ConnectivityManager.isActiveNetworkMetered всегда возвращает true (даже если на Wi-Fi) Запуск службы в отдельном процессе андроида Android.mk относительные или абсолютные пути? Android – Как загрузить приложение HelloWorld на свой телефон? Метод get () AsyncTask: есть ли какой-нибудь сценарий, где это действительно лучший вариант? Достигнутый размер MAX для кэша операторов compiled-sql для базы данных Подписанный apk, получивший отказ в proguard enable Android устарел модуль apache (HttpClient, HttpResponse и т. Д.) Android – Как показать изображения из доступных ресурсов? Оценка MapboxGLManager.mapStyles Adb вытащить несколько файлов Webview внутри RecyclerView показывает пустой экран иногда только на устройствах Nougat Различные макеты для разных размеров экрана на Android? Есть ли способ узнать, скомпилирована ли определенная зависимость в файле gradle, возвращая логическое значение

Как прокрутить макет, который имеет 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)); 

}