728x90

Spinner 기능은 HTML 의 select 와 유사하다.


Drop down list 로 보여지는 기능을 http://android-town.org/ 사이트에 나오는 DoIt 안드로이드 동영상 강좌를 보고 따라서 해보고 구글링을 해서 약간 변경을 해본 것이다.

동영상 강좌를 보면서 배우는 가장 좋은 점은 eclipse 사용법인 거 같다.

이 사이트에 나오는 동영상은 예제 중심으로 연습하면서 안드로이드가 이런 것이구나 하도록 알려주는 데 효과가 좋은거 같다.

책은 들여다봐도 아직은 감이 잘 잡히지는 않는다. 동영상을 들어야만 비로소 이해가 된다고나 할까...


SQL 교육을 받을 때에도 계속 연습을 시키는데 처음에는 왜 개념 완전히 잡히게 설명안해주고 실습부터 시킬까 하는 의구심이 들었던 적이 있다.

하지만 계속 실습을 하면서 아하 이렇구나 하고 도움이 되기는 하더라.

물론 나중에 다시 복습하고 개념이 이런 것이구나 하고 개념이 잡히는 순간에 활용이라는 걸 할 수 있게 되었지만 말이다.


내것으로 만들기 위해 간단하지만 적어두고 나중에 추가하여 완전히 내것으로 소화를 할 것이다.

이것만으로는 응용할 수는 없다. DB 자료와 연동하여 처리가 될 때 이 기능의 가치가 발휘될 것이다.

개념파악이 되고 나면 다시 이 자료에 살을 붙여서 추가를 할 것이다.


Graphical Layout 에서는 세밀한 조정을 할 수가 없다.

세부적인 화면 구성을 하려면 XML 파일에서 직접 적어줘야 된다는 걸 알았다.

따라서 Layout 에 대한 의미를 제대로 파악하고 있어야 한다.



아래 Graphcal Layout 의 의미를 파악하려면 XML 소스를 살펴보면 된다.


@ : 리소스에서 참조한다는 의미

+ : 새로 생성한다는 의미

id : 식별자를 나타내는 패키지

textView1 : 식별자


XML Layout 에 정의된 View들은 앱이 시작될 때 메모리 상에서 Inflation 이라는 객체화 과정을 거쳐 만들어진다. 메모리상에 만들어진 객체를 참조하기 위해 id 를 지정한다.

id 값은 유일해야 한다. id가 중복되면 에러가 발생한다.

컴파일할 때 eclipse  JUNO 버전에서 문제가 없었는데 eclipse LUNA 버전에서는 에러 메시지가 나오는 걸 확인했고 이 원인으로 인해서 삼성 갤럭시 S7 폰에서 앱이 동작이 안되는 걸 알게되었다.

eclipse Mars 버전에서는 기존 기능이 제대로 동작 안되는 현상도 겪어서 eclipse LUNA 버전 중심으로 코드 연습을 하고 있다.




setContentView(R.layout.activity_main);  // 보여주는 View 가 어떤 Layout 인지 알 수 있다.


spinner1 = (Spinner) findViewById(R.id.spinner1); // id가 spinner1 인 것을 찾아 참조변수 spinner1 에 저장한다.


list 는 C#과 비슷한 거 같은데 세부적인 것은 아직 파악하지 못한 상태다.

list.add 를 하면 계속 사용자를 추가할 수 있고, 중간 끼어넣기 등이 편리하다.

이렇게 직접 처리하는 것보다는 DB 연결해서 처리하는 영역이 될 것이므로 이 부분은 나중을 위해 그런가보다 참고만 하면 된다.



연습하며 작성한 소스코드

MySpinner.zip


참고 : http://www.tutorialspoint.com/android/android_spinner_control.htm 에 가면 설명이 잘되어 있다.


간단한 예제 읽어보기 좋은 곳 http://www.mkyong.com/tutorials/android-tutorial/



Audio Player 만들어보면서 추가한 재생속도 조절 부분만 일부 발췌한 것이다.


public class Player extends AppCompatActivity implements View.OnClickListener {
    // speed values displayed in the spinner
    private String[] getSpeedStrings() {
        return new String[]{"1.0","0.9","1.1","1.2","1.3"};
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);

        setSpeedOptions();
    }

    private void setSpeedOptions() {
        // 재생 속도 조절
        final Spinner speedOptions = (Spinner) findViewById(R.id.speedOptions);
        String[] speeds = getSpeedStrings();
        ArrayAdapter<String> arrayAdapter =  new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, speeds);
        speedOptions.setAdapter(arrayAdapter);
        // change player playback speed if a speed is selected
        speedOptions.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                if (mediaPlayer != null) {
                    float selectedSpeed = Float.parseFloat(
                            speedOptions.getItemAtPosition(i).toString());

                    changeplayerSpeed(selectedSpeed);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
    }

    private void changeplayerSpeed(float speed) {
        // this checks on API 23 and up
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed));
            } else {
                mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed));
                mediaPlayer.pause();
            }
        }
    }

}



블로그 이미지

Link2Me

,