Gostaria de ativar o ScrollView e desativá-lo com um clique de botão.
Desativar significa como se o ScrollView não estivesse lá ... e ativá-lo retorna o ScrollView.
Eu quero isso porque eu tenho uma galeria com imagens de texto, e com um botão clique a orientação da tela muda, então em Paisagem o texto fica maior. E eu quero o ScrollView para que a imagem não se estique e o texto se torne ilegível.
scrollview.Enabled=false / setVisibility(false)
não faz nada.
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>
obrigado
Edit1: Não posso usar Visibility (ido), pois isso também ocultaria a Galeria, o que eu quero é ocultar o efeito do ScrollView. Quando há ScrollView, as imagens na Galeria se tornam roláveis e não cabem na tela, então você tem que rolar para ver a imagem inteira, não quero desabilitar / habilitar isso com um clique de botão.
Eu tentei isso:
((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);
Mas ainda assim as imagens na Galeria são roláveis e não cabem na tela .. qual é a solução para isso?
onTouchEvent(MotionEvent ev)
Eu tinha ido por este caminho:
fonte
ListView
funciona da maneira oposta: verdadeiro quando a rolagem está desabilitada e falso quando está habilitada.Encontrei esta solução simples, acabei de definir
fonte
requestDisallowInterceptTouchEvent
só funciona para o filho da Visualização a ser bloqueado. Então seria mais comomLinearLayout.requestDisallowInterceptTouchEvent(true);
Desativar ScrollView
fonte
para começar, usei o código postado no primeiro comentário, mas mudei assim:
então eu chamei desta forma
porque eu tentei
mas disse que setIsScrollable é indefinido
Eu espero que isso te ajude
fonte
ScrollView
for o contêiner de layout principal de sua classe de layout.Aqui está uma solução mais simples. Substitua o
onTouch()
porScrollView
OnTouchListener
e retorne falso se quiser ignorar a rolagem pelo toque. A rolagem programática ainda funciona e não há necessidade de estender aScrollView
aula.fonte
Não tenho pontos suficientes para comentar uma resposta, mas gostaria de dizer que a resposta de mikec funcionou para mim, exceto que eu tive que alterá-la para retornar! IsScrollable assim:
fonte
fonte
@JosephEarl +1 Ele tem uma ótima solução aqui que funcionou perfeitamente para mim com algumas pequenas modificações para fazê-lo programaticamente.
Aqui estão as pequenas alterações que fiz:
Classe LockableScrollView:
Atividade principal:
fonte
Eu tinha um layout sobre o NestedScrollView consumindo o evento de toque e desabilitando a rolagem:
e para habilitar:
fonte
Você pode fazer um CustomScrollView, para o qual você pode desabilitar sua interferência com outras visualizações. Embora isso às vezes possa ser irritante para o usuário final. Use-o com cuidado.
Este é o código:
Como usar o CustomScrollView?
Você pode adicionar CustomScrollView como um pai à tela na qual deseja adicionar outro Scrollview como um filho, e toda a tela é rolável. Eu usei isso para um RelativeLayout.
Funcionou para o meu caso.
fonte
fonte
Isso ajuda?
fonte
Você pode estender a galeria e usar algum sinalizador para desativar a rolagem quando quiser:
fonte
Como você pode ver na documentação , você não pode definir a visibilidade como falsa. No seu caso, você provavelmente deve usar:
fonte
no ouvinte do clique do botão apenas faça
para que a barra de rolagem não seja habilitada no clique do botão
fonte