【Android Studio】SeekBarの使い方 – Java編

Sara
この記事では、音量調節やサイズ調節に使うことができる SeekBar の使い方を紹介します。
実装するのは
- TextView に SeekBar の初期値を表示
- SeekBar を変更したら TextView を更新
- Button を押したら初期値に戻す
の3つです。
【完成イメージ】

目次
開発環境
Android Studio | Chipmunk 2021.2.1 |
Android Emulator | Nexus 4 (API 32) |
compileSdk / targetSdk | 32 |
minSdk | 16 |
プロジェクトについて
SeekbarSample という名前のプロジェクトを作成して
- MainActivity.java
- activity_main.xml
がある状態で実装していきます。
Snackbarの使い方
1. レイアウトの用意
activity_main.xml を開いて、以下のようにレイアウトを用意します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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" | |
tools:context=".MainActivity" | |
android:orientation="vertical" | |
android:gravity="center"> | |
<TextView | |
android:id="@+id/textView" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
tools:text="100" | |
android:textSize="36sp"/> | |
<SeekBar | |
android:id="@+id/seekbar" | |
android:layout_width="300dp" | |
android:layout_height="wrap_content" | |
android:max="100" | |
android:progress="50" | |
android:layout_marginVertical="40dp"/> | |
<Button | |
android:id="@+id/button" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="リセット"/> | |
</LinearLayout> |
22行目
max 属性で SeekBar の最大値を指定します。
最小値は0になるので、ここでは0~100の範囲で数値を取得することができます。
23行目
progress 属性で初期値を設定できます。
2. SeekBarの値を取得する
まずは TextView に SeekBar の初期値を表示します。
MainActivity.java を開いて、8~13行目を追加します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MainActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
TextView textView = findViewById(R.id.textView); | |
SeekBar seekbar = findViewById(R.id.seekbar); | |
Button button = findViewById(R.id.button); | |
// 初期値を表示 | |
textView.setText(seekbar.getProgress() + ""); | |
} | |
} |
3. SeekBarの値を変更する
「リセット」ボタンを押したら、初期値50の位置に戻るようにします。
11~16行目を追加します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MainActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
/* 省略 */ | |
// 「リセット」を押したら50にする | |
button.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View view) { | |
seekbar.setProgress(50); | |
} | |
}); | |
} | |
} |
4. SeekBarイベントリスナー
SeekBar の動きに合わせて TextView の値を更新します。
SeekBar に加えた変更は OnSeekBarChangeListener を使って取得することができます。
用意されているメソッドは
- onProgressChanged(変更中)
- onStartTrackingTouch(変更開始時)
- onStopTrackingTouch(変更終了時)
の3つです。
11~24行目のコードを書きます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MainActivity extends AppCompatActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
/* 省略 */ | |
// SeekBarイベント | |
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | |
@Override | |
public void onProgressChanged(SeekBar seekBar, int i, boolean b) { | |
textView.setText(i + ""); | |
} | |
@Override | |
public void onStartTrackingTouch(SeekBar seekBar) { | |
} | |
@Override | |
public void onStopTrackingTouch(SeekBar seekBar) { | |
} | |
}); | |
} | |
} |
13行目
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
1つ目の引数 seekBar は イベントが発生している SeekBar です。
2つ目の引数 i が SeekBar の現在の値です。
3つ目の引数 b は「ユーザーが加えた変更か」を Boolean 型で取得できます。
5. 完成
以上で完成です!

完成版のコード
- activity_main.xml
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
<?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" tools:context=".MainActivity" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="100" android:textSize="36sp"/> <SeekBar android:id="@+id/seekbar" android:layout_width="300dp" android:layout_height="wrap_content" android:max="100" android:progress="50" android:layout_marginVertical="40dp"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="リセット"/> </LinearLayout>
Q
- MainActivity.java
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.example.seekbarsample; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.SeekBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.textView); SeekBar seekbar = findViewById(R.id.seekbar); Button button = findViewById(R.id.button); // 初期値を表示 textView.setText(seekbar.getProgress() + ""); // 「リセット」を押したら50にする button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { seekbar.setProgress(50); } }); // SeekBarイベント seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { textView.setText(i + ""); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } }
Q
ABOUT ME

書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
COMMENT
投稿いただいたコメントは管理者の承認後に表示されます。
コードやエラーに関するご質問の場合は、以下の3点
をできるだけ具体的に必ず書いてください。