Scroll View layout is one of the layout types in Android which is useful to load more content in one screen at a single view page. Based on content Scroll View will extend and show the content on screen. The scroll view will contain one linear view and load a string of content. Also, the list view can show the list of data in a linear layout.
Two types of scroll views are vertical and horizontal layouts. Let's see xml page example.
Vertical Scroll View layout
<ScrollView
android:id="@+id/ScrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:id="@+id/Container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
Horizontal Scroll View layout
<HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/Container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" />
</HorizontalScrollView>
Let's take the Note App example, added note's content showing in list with Linear layout. It's inside the scroll view, so a lot of content can be saved in the same layout. Many real-time apps will use the scroll view like YouTube, google, etc..
Java Code
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class NotesActivity extends AppCompatActivity {
private static final String PREFS_NAME = "NotePrefs";
private static final String KEY_NOTE_COUNT = "NoteCount";
private LinearLayout notesContainer;
private List<Note> noteList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notes);
notesContainer=findViewById(R.id.notesContainer);
Button saveButton =findViewById(R.id.saveButton);
noteList = new ArrayList<>();
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveNote();
}
});
displayNotes();
}
private void displayNotes() {
for (Note note : noteList) {
createNoteView(note);
}
}
private void saveNote() {
EditText titleEditText = findViewById(R.id.titleEditText);
EditText contentEditText = findViewById(R.id.contentEditText);
String title = titleEditText.getText().toString();
String content = contentEditText.getText().toString();
if (!title.isEmpty() && !content.isEmpty()) {
Note note = new Note();
note.setTitle(title);
note.setContent(content);
noteList.add(note);
saveNotesToPreferences();
createNoteView(note);
clearInputFields();
}
}
private void clearInputFields() {
EditText titleEditText = findViewById(R.id.titleEditText);
EditText contentEditText = findViewById(R.id.contentEditText);
titleEditText.getText().clear();
contentEditText.getText().clear();
}
private void createNoteView(final Note note) {
View noteView = getLayoutInflater().inflate(R.layout.note_item,null);
TextView titleTextView = noteView.findViewById(R.id.titleTextView);
TextView contentTextView = noteView.findViewById(R.id.contentTextView);
titleTextView.setText(note.getTitle());
contentTextView.setText(note.getContent());
noteView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showDeleteDialog(note);
return true;
}
});
notesContainer.addView(noteView);
}
private void showDeleteDialog(final Note note) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Delete this note.");
builder.setMessage("Are you sure you want to delete this note?");
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
deleteNoteAndRefresh(note);
}
});
builder.setNegativeButton("Cancel", null);
builder.show();
}
private void deleteNoteAndRefresh(Note note) {
noteList.remove(note);
saveNotesToPreferences();
refreshNoteViews();
}
private void refreshNoteViews() {
notesContainer.removeAllViews();
displayNotes();
}
private void saveNotesToPreferences() {
SharedPreferences sharedPreferences = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(KEY_NOTE_COUNT, noteList.size());
for (int i = 0; i < noteList.size(); i ++) {
Note note = noteList.get(i);
editor.putString("note_title_" + i, note.getTitle());
editor.putString("note_content_" + i, note.getContent());
}
editor.apply();
}
}
XML Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:padding="16dp"
android:background="#3C10"
tools:context=".NotesActivity">
<LinearLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent">
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Add" />
<EditText
android:id="@+id/titleEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/edittext_bg"
android:hint="Header -Title "
android:paddingLeft="10dp"
android:textColor="@color/black" />
<EditText
android:id="@+id/contentEditText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:background="@drawable/edittext_bg"
android:hint="Description"
android:inputType="textMultiLine"
android:minLines="3"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="@color/black" />
</LinearLayout>
<TextView
android:id="@+id/notesTextView"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="16dp"
android:text="Scroll View in List added Notes"
android:textSize="25dp"
android:textStyle="bold"
/>
<ScrollView
android:id="@+id/notesScrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:id="@+id/notesContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
</LinearLayout>
Output