Как сделать некоторые виджеты в представлении прокрутки не прокручиваемыми или закрепленными в верхней части экрана, как заголовок - PullRequest
2 голосов
/ 01 октября 2011

Я создаю приложение для Android, в котором пользователь может просматривать список каналов и список программ на одном экране.Например: -

Изображение канала будет слева, а запланированные программы - справа, а пользователь может прокручивать список программ по горизонтали, а поскольку будет много каналов, пользователь также может прокручиватьзавершить макет по вертикали.Все это было реализовано, но что я не могу сделать, так это заголовок должен быть липким вверху.

Заголовок состоит из 2 частей: - 1. Простой просмотр изображений слева над списком каналов и должен оставаться закрепленным сверху и не иметь возможности прокрутки. 2. Заголовок списка временных интервалов, например, 00:00, 01:00, 02:00 справа от приведенного выше изображения и в списке программ выше и не должны быть прокручиваемыми по вертикали, но должны прокручиваться по горизонтали.

Ниже приведен код, который я использую для отображениямакет Все, что я не могу сделать, это два вышеуказанных пункта.Они просто не остаются липкими, они также прокручивают вверх и вниз с остальной частью макета

        <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content">

                        <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
                                        android:layout_alignParentLeft="true" android:id="@+id/image_layout">
                                        <ImageView android:layout_gravity="center_vertical|center_horizontal" android:layout_width="wrap_content"
                                                   android:layout_height="wrap_content"  android:src="@drawable/tv_guide_channels" 
                                                   android:scaleType="fitCenter" android:id="@+id/channel_img_header"
                                                  android:layout_alignParentTop="true"/>
                                        <LinearLayout android:id="@+id/layout_to_add_channel_image" android:layout_width="wrap_content"
                                                      android:layout_height="wrap_content" android:orientation="vertical"
                                                      android:background="@color/White" android:layout_below="@id/channel_img_header" 
                                                      android:layout_alignParentBottom="true"/>
                       </RelativeLayout>

                       <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
                                       android:layout_alignParentRight="true" android:layout_toRightOf="@id/image_layout"
                                       android:id="@+id/programme_layout">
                                        <HorizontalScrollView android:layout_width="fill_parent" android:layout_height="wrap_content">
                                                        <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content">
                                                                    <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"
                                                                                    android:orientation="horizontal" android:id="@+id/table_header"
                                                                                    android:layout_alignParentTop="true">
                                                                    </LinearLayout>
                                                                    <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content"
                                                                                android:layout_below="@id/table_header">
                                                                    <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content">
                                                                                    <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"
                                                                                                    android:gravity="center_vertical" android:background="@color/greyblue"
                                                                                                    android:orientation="vertical" android:id="@+id/table_programme"
                                                                                                    android:layout_alignParentBottom="true">
                                                                                     </LinearLayout>    

                                                                        </RelativeLayout>
                                                                        </ScrollView>
                                                            </RelativeLayout>
                                         </HorizontalScrollView>
                       </RelativeLayout>

        </RelativeLayout>

<LinearLayout android:layout_height="2dip" android:layout_width="fill_parent" android:background="@color/Black"></LinearLayout>

Ответы [ 3 ]

1 голос
/ 02 сентября 2015

Я знаю, что это старый вопрос, размещение моего ответа, так как это поможет другим, кто ищет то же самое.
Я использую библиотеку StickyScrollViewItems для той же цели. Любой вид внутри scrollView может быть помечен как «Липкий», чтобы сделать его липким сверху.

0 голосов
/ 04 октября 2011

Хорошо, спасибо за ссылку, но я нашел решение: -

Всегда можно использовать пользовательские виджеты, и это тоже не страшно :) В моем случае я использовал пользовательские виды прокрутки и в xml упомянул их имя пакета+ className

Например:

<org.vision_asia.utils.MyScrollView1
android:id="@+id/sv1"
android:layout_below="@id/channel_img_header"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:scrollbars="none">

<LinearLayout
    android:background="@color/White"
    android:id="@+id/layout_to_add_channel_image"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/channel_img_header"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:orientation="vertical" />

, и вы хотите синхронизировать это ScrollView с другим представлением прокрутки, так что если пользователь прокручивает это представление прокрутки, то одновременно другая прокруткапредставление должно прокручиваться так, как если бы все элементы находились только в одном представлении прокрутки

public class MyScrollView1 extends ScrollView {

    public MyScrollView2 sv2;

    public MyScrollView1(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public MyScrollView1(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        // TODO Auto-generated method stub
        sv2.scrollTo(oldt, t);
        super.onScrollChanged(l, t, oldl, oldt);
    }
}

, а в основной деятельности вы должны вызывать настраиваемое представление прокрутки следующим образом: -

sv1 = (MyScrollView1)channelsList.findViewById(R.id.sv1);
sv1.sv2 = sv2;

гдеsv2 - это прокрутка, которую нужно синхронизировать

Для полной синхронизации вам понадобятся 2 пользовательских вида прокрутки

Наслаждайтесь

0 голосов
/ 01 октября 2011

Защищайте свой заголовок от любого ScrollView.

Отредактировано

Привет, Абхишек По вдохновению твоей проблемы я попытался ее решить.Вы можете проверить это здесь

...