Quero criar um layout que me permita rolar para baixo usando o layout de restrição, mas não sei como fazê-lo. Deveria ScrollView
ser o pai desse ConstraintLayout
tipo?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<android.support.constraint.ConstraintLayout
android:id="@+id/Constraint"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Ou o contrário? Talvez alguém possa me indicar um bom tutorial sobre isso ou dar um exemplo, parece que não consigo encontrar um.
Além disso, não sei se isso é um bug ou alguma configuração que não defini, mas vi imagens como esta:
onde existem alguns componentes fora do blueprint "retângulo azul", no entanto eles são visíveis, enquanto do meu lado, se eu colocar um componente no "espaço em branco", não consigo vê-lo ou movê-lo para qualquer lugar, e ele aparece na árvore de componentes .
ATUALIZAÇÃO:
Encontrei uma maneira de tornar o layout da restrição rolável na ferramenta de design, usando uma diretriz horizontal para empurrar a borda do layout da restrição e estendê-la para além do dispositivo. Depois disso, você pode usar a diretriz como a nova parte inferior do layout da restrição. ancorar os componentes.
Há um tipo de restrição que quebra a função de rolagem:
Apenas certifique-se de não usar esta restrição em nenhuma visualização ao desejar que você
ConstraintLayout
possa rolar comScrollView
:Se você removê-los, seu pergaminho deve funcionar.
Explicação:
Definir a altura da criança para coincidir com a dos
ScrollView
pais é contraditório com o que o componente deve fazer. O que queremos na maioria das vezes é que algum conteúdo de tamanho dinâmico seja rolável quando for maior que uma tela / quadro; combinar a altura com o paiScrollView
forçaria todo o conteúdo a ser exibido em um quadro fixo (a altura do pai), invalidando assim qualquer funcionalidade de rolagem.Isso também acontece quando os componentes filhos diretos regulares são definidos como
layout_height="match_parent"
.Se você deseja que o filho de
ScrollView
corresponda à altura do pai, quando não há conteúdo suficiente, simplesmente definaandroid:fillViewport
como true para oScrollView
.fonte
Usar o NestedScrollView com a viewport true está funcionando bem para mim
para android x use isso
fonte
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Para resumir, você basicamente agrupa sua
android.support.constraint.ConstraintLayout
exibição em umScrollView
texto do*.xml
arquivo associado ao seu layout.Exemplo activity_sign_in.xml
Nota 1: As barras de rolagem aparecem apenas se for necessário um agrupamento, incluindo o teclado aparecendo.
Nota 2: Também não seria uma má idéia garantir que o ConstraintLayout seja grande o suficiente para alcançar a parte inferior e as laterais de qualquer tela, especialmente se você tiver um plano de fundo, pois isso garantirá que não haja espaço em branco estranho . Você pode fazer isso com espaços, se nada mais.
fonte
Basta usar o layout de restrição dentro
NestedScrollView
ouScrollView
.é isso aí. aproveite sua codificação.
fonte
Para criar um layout rolável, o layout está correto. Não será rolável até que haja motivo para rolar (como em qualquer outro layout). Portanto, adicione conteúdo suficiente e ele poderá ser rolado, como em qualquer layout (Linear, Relativo etc.). No entanto, você não pode rolar corretamente no Blueprint ou no modo de design ao projetar com ConstraintLayout e ScrollView.
Significado:
Você pode criar um ConstraintLayout rolável, mas ele não rolará corretamente no editor devido a um bug / cenário que não foi considerado. Mas, mesmo que a rolagem não funcione no editor, ela funciona em dispositivos. (Eu fiz vários COnstraintLayouts de rolagem, então testei)
Nota
Em relação ao seu código. Está faltando uma tag de fechamento no ScrollView, não sei se é o caso no arquivo ou se há uma falha de copiar e colar, mas você pode querer dar uma olhada.
fonte
Para concluir as respostas anteriores, estou adicionando o exemplo a seguir, que também leva em consideração o uso da AppBar. Com esse código, o editor de design do Android Studio parece funcionar bem com o ConstraintLayout.
fonte
você precisa cercar meu layout de restrição com uma tag ScrollView e fornecer a propriedade android: isScrollContainer = "true".
fonte
Há um erro na versão 2.2 que torna impossível rolar o ConstraintLayout. Eu acho que ainda existe. Você pode usar LinearLayout ou RelativeLayout como alternativa.
Além disso, confira: É possível colocar um layout de restrição dentro de um ScrollView .
fonte
O layout de restrição é o padrão para um novo aplicativo. Agora estou "aprendendo com o Android" e tive muita dificuldade em descobrir como lidar com o código "amostra" padrão para rolar quando um teclado está ativo. Eu já vi muitos aplicativos nos quais tenho que fechar o teclado para clicar no botão "enviar" e, às vezes, ele não desaparece. Usando essa hierarquia [ScrollView / ContraintLayout / Fields], está funcionando muito bem agora. Dessa forma, podemos obter os benefícios e a facilidade de uso do ConstraintLayout em uma exibição rolável.
fonte
Retire o botão inferior do nestedscrollview e use o layout linear como pai. Adicione bottom e nestedscrollview como seus filhos. Funcionará absolutamente bem. No manifesto da atividade, use isso - isso aumentará o botão quando o teclado for aberto
fonte
Você pode usar
HorizontalScrollView
e vai funcionar também!fonte
Foi assim que resolvi:
Se você estiver usando o ScrollView aninhado, ou seja, o ScrollView dentro de um ConstraintLayout, use a seguinte configuração para o ScrollView em vez de "WRAP_CONTENT" ou "MATCH_PARENT":
fonte
no scrollview make height e width 0 adicione restrições Top_toBottomOfand Bottom_toTopOf, é isso.
fonte
Para mim, nenhuma das sugestões sobre a remoção de restrições inferiores ou a configuração do contêiner de rolagem para true parecia funcionar. O que funcionou: expanda a altura das visualizações individuais / aninhadas no meu layout para que elas "se estendam" além do pai usando a opção "Expandir verticalmente" do Editor de layout de restrições, como mostrado abaixo.
Para qualquer abordagem, é importante que as linhas de visualização pontilhada se estendam verticalmente além das dimensões superior ou inferior do pai
fonte