🎞️프로젝트/android

[Android] Doit 안드로이드 프로그레스바, 시크바 6번 과제 (심화 버전)

pkyung 2021. 12. 12. 00:54
반응형

 

시크바와 브로그레스바 보여주기

- 화면에 시크바와 프로그레스바, 그리고 입력상자를 배치합니다.

- 시크바의 값을 바꾸면 프로그레스바의 값도 바뀌도록 합니다.

- 시크바의 값을 바꾸었을 때 그 값이 입력상자에 표시되도록 합니다.

- 프로그레스바는 막대형을 사용합니다.

 

메인 화면은 constraintLayout을 사용했습니다.

activity_main.xml 코드

activity_main.xml 
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                                   xmlns:tools="http://schemas.android.com/tools"
                                                   xmlns:app="http://schemas.android.com/apk/res-auto"
                                                   android:layout_width="match_parent"
                                                   android:layout_height="match_parent" tools:context=".MainActivity">
    <SeekBar android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/seekBar"
             app:layout_constraintBottom_toTopOf="@+id/editText" android:max="100" android:layout_marginBottom="44dp"
             app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
    <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="0dp"
                 android:layout_height="wrap_content" android:max="100" android:id="@+id/progressBar"
                 android:layout_marginBottom="52dp" app:layout_constraintBottom_toTopOf="@+id/seekBar"
                 app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
    <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="number"
              android:ems="10" android:id="@+id/editText" app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
              android:layout_marginTop="256dp" android:text="0"/>
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java 코드입니다.

 

저는 과제에 나온 시크바를 바꿨을 때 적용되는 프로그레스바와 입력상자 값 표시도 정하였지만

EditText에 넣은 값을 시크바와 입력상자에 적용하는 방법 또한 구현해봤습니다.

방법은 seekBar의 리스너 함수와 editText의 리스너 함수를 이용하여 적용시켰고, 이 코드의 문제는 editText 값이 비어있을 때, 어플이 꺼진다는 점입니다.

MainActivity.java 
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import static android.content.ContentValues.TAG;

public class MainActivity extends AppCompatActivity {
    ProgressBar progressBar;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = findViewById(R.id.progressBar);
        editText = findViewById(R.id.editText);
        SeekBar seekBar = findViewById(R.id.seekBar);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String value = editText.getText().toString();
                progressBar.setProgress(Integer.parseInt(value));
                seekBar.setProgress(Integer.parseInt(value));
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                Log.d(TAG, String.format("onProgressChanged 값 변경 중 : progress [%d] fromUser [%b]", i, b));
                progressBar.setProgress(i);
                editText.setText(i + "");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
        });
    }
}

s

 

결과적으로 이렇게 구현했습니다.

반응형