🎞️프로젝트/android

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

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

 

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

반응형
저작자표시 (새창열림)

'🎞️프로젝트 > android' 카테고리의 다른 글

[Android] cannot resolve symbol "TextView" 오류 해결하기  (0) 2021.09.26
'🎞️프로젝트/android' 카테고리의 다른 글
  • [Android] cannot resolve symbol "TextView" 오류 해결하기
pkyung
pkyung
pkyung
성장하는 중
pkyung
전체
오늘
어제
  • 분류 전체보기
    • 🏆토이 프로젝트에서 생긴 일
    • 🤿백엔드 내실 채우기
    • 🍫카카오 테크 캠퍼스 2기 BE
    • 🍀spring
      • 스프링 입문
      • 스프링 핵심원리 기본
      • 스프링 jpa
      • 🐛debug
    • 🔒보안
    • 🌎infra
      • docker
      • kubernetes
      • cloud
    • 🌐web
      • HTTP 웹 기본 지식
    • 🔑알고리즘
      • baekjoon
      • programming language
    • 🎞️프로젝트
      • android
      • flutter
    • 📚수업
      • 교양과목
    • 💾database
    • ⚙settings
    • 2023 여름 모각코 - 절개와지조
    • 2024 겨울 모각코 - 내 장점은 algorit..

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스택
  • Security
  • BFS
  • mysql
  • 문자열
  • 자바문자열
  • python
  • 백준
  • 스프링기본
  • 파이썬
  • be
  • 카카오테크캠퍼스
  • 자바
  • Docker
  • Java
  • 스프링부트
  • 코드리뷰
  • nginx
  • 스프링
  • sql
  • spring
  • springboot
  • 소수
  • JPA
  • 객체지향
  • 객체지향의사실과오해
  • 데이터베이스
  • HTTP
  • 김영한
  • 카테캠

최근 댓글

최근 글

hELLO · Designed By 정상우.
pkyung
[Android] Doit 안드로이드 프로그레스바, 시크바 6번 과제 (심화 버전)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.