on
[Android] Doit 안드로이드 프로그래스바, 시크바 6번 과제 (심화 버전)
[Android] Doit 안드로이드 프로그래스바, 시크바 6번 과제 (심화 버전)
시크바와 브로그레스바 보여주기
- 화면에 시크바와 프로그레스바, 그리고 입력상자를 배치합니다.
- 시크바의 값을 바꾸면 프로그레스바의 값도 바뀌도록 합니다.
- 시크바의 값을 바꾸었을 때 그 값이 입력상자에 표시되도록 합니다.
- 프로그레스바는 막대형을 사용합니다.
메인 화면은 constraintLayout을 사용했습니다.
activity_main.xml 코드
activity_main.xml
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
결과적으로 이렇게 구현했습니다.
from http://p-kyung.tistory.com/23 by ccl(A) rewrite - 2021-12-12 01:01:53