Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прокрутка TextView по вертикали который вложен в V 
:(
    Опции темы
derbeerk
  Дата 3.7.2012, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.7.2012

Репутация: нет
Всего: нет



Дано: ViewPager, в котором находится TextView.
Задача: Когда текст в TextView не вмещается на экран, он должен прокручиваться по вертикали.
Проблема: Похоже что ViewPager перехватывает вертикальный скроллинг. Даже когда в TextView отображается scrollbar, он всё равно не прокручивается.


Вот так выглядит TextView

Код

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/txText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#338877"
        android:padding="15dp"
        android:scrollHorizontally="false"
        android:scrollbarAlwaysDrawVerticalTrack="true"
        android:scrollbars="vertical"
        android:textAppearance="?android:attr/textAppearanceMedium" />



Это ViewPager

Код
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/vpPonkSwiper"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/lbPonkFooter" />

    <TextView
        android:id="@+id/lbPonkFooter"
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="Footer" />

</RelativeLayout>


И адаптер к ViewPager

Код
public class PonkPageAdapter extends PagerAdapter
{
  private int       pagesCount  = -1;
  private List<ponk>    data;
  private App       app;
  private MockPersistence db;
  private Activity    activity;
  private TextView    currentView;
  private LayoutInflater  inflater;

  public PonkPageAdapter(Activity activity, byte section) 
  {
    this.activity = activity;
    this.app = ((App) activity.getApplication());
    this.db = app.getPersistence();
    this.section = section;
    this.data = db.findPonksBySection(section); // new LinkedList<ponk>();
    this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    //
    this.pagesCount = db.countPonksInSection(section);
  }

  @Override
  public int getCount()
  {
    return pagesCount;
  }

  @Override
  public Object instantiateItem(View collection, int position)
  {
    TextView tv = getNewView();
    Ponk j = data.get(position);
    tv.setText(j.text);
    tv.setTag(j.id);
    setFontSizeInSP(tv, app.getFontSize());
    tv.setTag(position);
    ((ViewPager) collection).addView(tv, 0);

    return tv;
  }

  private TextView getNewView()
  {
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     TextView tv = (TextView)inflater.inflate(R.layout.Ponk, null);
    return tv;
  }

  @Override
  public void setPrimaryItem(ViewGroup container, int position, Object object)
  {
    currentView = (TextView) object;
  }

  @Override
  public void destroyItem(View collection, int position, Object view)
  {
    ((ViewPager) collection).removeView((TextView) view);
  }

  @Override
  public boolean isViewFromObject(View view, Object object)
  {
    return view == (TextView) object;
  }

  @Override
  public Parcelable saveState()
  {
    return null;
  }
}

PM MAIL   Вверх
agen
Дата 9.9.2012, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.9.2012

Репутация: нет
Всего: нет



При большом количестве информации, которую нужно поместить на экране приходится использовать полосы прокрутки. В Android существуют специальные виджеты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от ViewGroup. Обратите внимание, что класс TextView использует свою собственную прокрутку и не нуждается в добавлении отдельных полос прокрутки. Но использование отдельных полос даже с TextView может улучшить вид вашего приложения и повышает удобство работы для пользователя.

На панели инструментов в Eclipse виджеты можно найти в папке Composition.
 

В контейнеры ScrollView и HorizontalScrollView можно размещать только один дочерний элемент (обычно LinearLayout), который в свою очередь может быть контейнером для других элементов. Виджет ScrollView, несмотря на свое название, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView. Обычно ScrollView используют в качестве корневого элемента, а HorizontalScrollView — дочернего.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scroll" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
<HorizontalScrollView 
    android:id="@+id/hscroll" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/textview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="24px" 
    android:isScrollContainer="true"/> 
</HorizontalScrollView> 
</ScrollView> 

В в теле метода onCreate() создайте ссылку на элемент TextView, объявленный в XML-разметке, и запишите в него через метод setText() какой-нибуль длинный текст, который не поместится в видимые размеры экрана устройства:

TextView text (TextView)findViewById(R.id.textview); 
// загружаем текст 
text.setText("здесь должен быть длинный текст"); 

Запустив проект, вы должны увидеть вертикальную и горизонтальную полосы прокрутки при попытке скроллирования.

Если полосы прокрутки вас раздражают, то используйте атрибут android:scrollbars="none", который скроет их.
Методы scrollBy() и scrollTo()

Вы можете программно прокручивать контент с помощью методов scrollBy() и scrollTo(). Например, можно организовать автоматическую прокрутку во время чтения. В нашем примере мы будем прокручивать контент с помощь трёх кнопок

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/scrollup"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Scroll Up" />

    <Button
        android:id="@+id/scrolldown"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Scroll Down" />

    <Button
        android:id="@+id/scrolltotop"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Scroll To Top" />

    <ScrollView
        android:id="@+id/myview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#A0A0A0"
            android:orientation="vertical" >

            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="This\nView\nCan\nBe\nScroled\nBy Buttons!"
                android:textSize="40dp" />

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Dummy Button" />

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Dummy Button" />

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Dummy Button" />
        </LinearLayout>
    </ScrollView>

</LinearLayout>

Сам код для методов:

package ru.alexanderklimov.scrollview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;

public class ScrollViewDemoActivity extends Activity {
    Button buttonScrollUp, buttonScrollDown, buttonScrollToTop;
    ScrollView myScroll;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        buttonScrollUp = (Button) findViewById(R.id.scrollup);
        buttonScrollDown = (Button) findViewById(R.id.scrolldown);
        buttonScrollToTop = (Button) findViewById(R.id.scrolltotop);
        myScroll = (ScrollView) findViewById(R.id.myview);

        buttonScrollUp.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                myScroll.scrollBy(0, +20);
            }
        });

        buttonScrollDown.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                myScroll.scrollBy(0, -20);
            }
        });

        buttonScrollToTop.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                myScroll.scrollTo(0, 0);
            }
        });
    }
}
PM MAIL WWW ICQ Skype AOL YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.