Отключить ScrollView программно? - PullRequest
100 голосов
/ 23 апреля 2011

Я хотел бы включить ScrollView и отключить его нажатием кнопки.
Отключить означает, что, если ScrollView там не было .. и включить его возвращает ScrollView.

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

scrollview.Enabled=false / setVisibility(false) ничего не делает.

XML:

<ScrollView 
android:id="@+id/QuranGalleryScrollView" 
android:layout_height="fill_parent" 
android:layout_width="fill_parent">
<Gallery android:id="@+id/Gallery" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:scrollbars="horizontal"></Gallery>
</ScrollView>

Спасибо

Edit1: я не могу использовать Visibility (ушел), так как это также скрыло бы Галерею, а я хочу скрыть эффект ScrollView. Когда есть ScrollView, изображения в Галерее становятся прокручиваемыми и не помещаются на экране, поэтому вам нужно прокрутить, чтобы увидеть все изображение, я не хочу отключать / включать это по нажатию кнопки.

Я пробовал это:

((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null);
                        ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setHorizontalScrollBarEnabled(false);
                        ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setVerticalScrollBarEnabled(false);
                        ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setEnabled(false);

Но все же изображения в Галерее прокручиваются и не помещаются на экране. Какое решение для этого?

Ответы [ 16 ]

1 голос
/ 08 ноября 2012

@ JosephEarl +1 У него есть отличное решение, которое отлично сработало для меня, с некоторыми незначительными изменениями для его выполнения программным способом.


Вот незначительные изменения, которые я сделал:

LockableScrollView Класс:

public boolean setScrollingEnabled(boolean enabled) {
    mScrollable = enabled;
    return mScrollable;
}

MainActivity:

LockableScrollView sv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sv = new LockableScrollView(this);
    sv.setScrollingEnabled(false);
}
1 голос
/ 14 июля 2011
@Override  
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {     
    case MotionEvent.ACTION_DOWN:         
        // if we can scroll pass the event to the superclass      
        if (mScrollable) return super.onInterceptTouchEvent(ev);      
        // only continue to handle the touch event if scrolling enabled    
        return mScrollable; // mScrollable is always false at this point     
        default:          
            return super.onInterceptTouchEvent(ev);      
            }
    }
0 голосов
/ 28 октября 2012

Вы можете расширить галерею и использовать флаг, чтобы отключить прокрутку, когда хотите:

public class MyGallery extends Gallery {

public boolean canScroll;

public MyGallery(Context context, AttributeSet attrs) {
    canScroll = true;
    super(context, attrs);
}

public void setCanScroll(boolean flag)
{
    canScroll = flag;
}

@Override
public boolean onScroll(android.view.MotionEvent e1, android.view.MotionEvent e2, float distanceX, float distanceY) {
    if (canScroll)
        return super.onScroll(e1,e2,distancex,distancey);
    else
        return false;
}

@Override
public boolean onSingleTapUp(MotionEvent e)
{
    if (canScroll)
        return super.onSingleTapUp(ey);
    else
        return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
    if (canScroll)
        return super.onFling(e1,e2,velocityX,velocityY);
    else
        return false;
}
}
0 голосов
/ 23 апреля 2011

при прослушивании нажатия кнопки просто сделайте

ScrollView sView = (ScrollView)findViewById(R.id.ScrollView01);

sView.setVerticalScrollBarEnabled(false);
sView.setHorizontalScrollBarEnabled(false);

, чтобы при нажатии кнопки не включалась полоса прокрутки

0 голосов
/ 23 апреля 2011

Помогает ли это?

((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null);
0 голосов
/ 23 апреля 2011

Как вы можете видеть в документации , вы не можете установить видимость в false. В вашем случае вы, вероятно, должны использовать:

scrollview.setVisibility(Visibility.GONE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...