본문 바로가기

프로그래밍 기초/Android

[Android]layout

layout만들기

layout오른클릭 newlayoutresourcefile-> filename은 소문자로만 표기한다.


text와 design

만들어진 layout은 text와 design두가지로 볼 수있다.

 

text

orientation vertical은 수직으로 쌓겠다는 의미이다. 수직에서는 폭을 경쟁할 필요가 없다.

 

 

design

화면을 눈으로 확인할 수 있다.

orientation-horizontal로 하면 수평으로 쌓인다. 수평에서는 높이를 경쟁할 필요가 없다.

 


layout에서 width와 height설정

원하는 요소르르 클릭한 후 레이아웃에서 넓이와 높이를 조정 할 수 있다.

match_parent 부모와 맞춘다. 

wrap_content 내가 필요한만큼 가진다. 

200dp       무조건 200dp로 가진다.(해상도 상관없이 거의 일정한 크기를 가진다.)

 


Common Attributes에서 gravity설정

쌓이는 위치를 지정할 수 있다.

 


layoutweight

레이아웃가중치

버튼들이 들어가고 남는 위치를 어떻게 나눠가질 것인지 설정한다.

첫번째 버튼만 layout_weight1을 줬을 때
첫번쨰,두번째 버튼에 layout_weight 줬을 때 

 

orientation을 horizontal로 해서 text에들어가보면  button세개의 의 layout_weight가

1로 되어있는 것을 확인할 수 있다.

 


이미지 삽입하기 

 

1.res-drawable에 사용할 이미지들을 넣는다.

안드로이드에서 사용하는 이미지는 소문자로 시작하며 png파일을 추천한다.

res/drawable/xxx.png로 넣은 것인데 R.drawable.xxx 혹은 @drawable/xxx로 참조할 수 있다.

 

 

2-1.이미지를 layout에 넣기위해서 text에서 하드코딩할 수 도 있고

2-2.design에서 background-drawable에서 원하는 사진을 선택하여 참조가능하다.

 


Linearlayout중첩

Linearlayout안에 Linearlayout을 넣을 수 있다.

수직정렬인 리니어레이아웃에 수평정렬인 리니어 레이아웃을 넣고 리니어레이아웃에 버튼 2개를 넣었다.

 

두개의 버튼의 layout_width를 0으로하고 layout_weight를 1로하면 두 버튼이 공평하게 자리를 나눠쓰게된다.

 

 


'전송','전송2' '전송3'인 버튼 3개가 있다.

'전송'의 onClick속성을 sendClicked 로 변경해주었고 id를 주지 않았다.

'전송2'는 onClick속성을 변경하지 않고 id를 sendBtn이라고 지었따.

'전송3'도 onClick속성 변경하고 id를 sendBtn2라고 지었다.

버튼을 입력하면  '메세지 입력..'창에 입력한 메세지가 토스트에 띄우게 했다.

 

onClick(O), id = x인  '전송'버튼 사용하는 방법


    //전송 버튼을 클릭하면 호출되는 함수
    public void sendClicked(View v){
        //1.EditText에 입력한 문자열을 읽어온다. 부여한 아이디의 일련번호를 입력하면 동적??를 리턴함
        EditText inputMsg=findViewById(R.id.inputMsg); //id="@+id/inputMsg"
        String msg=inputMsg.getText().toString();
        //2.Toast메세지에 문자열을 띄우기
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }

 

onClick(X), id=sendBtn 인 '전송2'버튼 사용하는 방법 (★가장 많이 쓰이는 형태)

class에 View.OnClickListener를 implements해주고 alt enter로 메소드 오버라이드 한다.

오버라이드한 onClick메소드에는 메세지를 토스트하는 로직을 넣느낟.

앱 실행시 바로 run되는 onCreate메소드에 버튼의 참조값을 이용하여 setOnClickListener를 콜한다.

public class MainActivity extends AppCompatActivity
                            implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //전송2 버튼의 참조값 얻어오기
        Button sendBtn=findViewById(R.id.sendBtn);
        //버튼에 클릭 리스너등록하기
        sendBtn.setOnClickListener(this);
    }
    //리스너를 등록한 버튼을 클릭하면 호출되는 메소드
    @Override
    public void onClick(View v) {
        //1.EditText에 입력한 문자열을 읽어온다. 부여한 아이디의 일련번호를 입력하면 동적??를 리턴함
        EditText inputMsg=findViewById(R.id.inputMsg); //id="@+id/inputMsg"
        String msg=inputMsg.getText().toString();
        //2.Toast메세지에 문자열을 띄우기
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
}

 

onClick(O), id = sendBtn2 인  '전송3'버튼 사용하는 방법

View.OnClickList인터페이스 타입을 listner필드에 가져와서 익명의 클래스를 생성한다.

오버라이드한 onClick메소드에 토스트메세지를 띄우는 로직을 넣는다.

 

onCreate메소드에서는 전송3버튼의 참조값을 얻어와서 setOnclickLister에 위에서만든 인터페이스를 넣은 변수

listner를 넣는다.

 

  //View.OnClickListener 인터페이스 type 을 필드에 가지고 있기
    View.OnClickListener listener=new View.OnClickListener(){ //익명의 클래스
        @Override
        public void onClick(View v) {
            //1.EditText에 입력한 문자열을 읽어온다. 부여한 아이디의 일련번호를 입력하면 동적??를 리턴함
            EditText inputMsg=findViewById(R.id.inputMsg); //id="@+id/inputMsg"
            String msg=inputMsg.getText().toString();
            //2.Toast메세지에 문자열을 띄우기
            Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
        }

    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //레이아웃만 바꾼다. 액티비티는 이동할 때 쌓인다.
        //전송3 버튼의 참조값 얻어오기
        Button sendBtn2=findViewById(R.id.sendBtn2);
        sendBtn2.setOnClickListener(listener);
    }