LinearLayout

각 객체를 수직 혹은 수평방향으로 배열하는 레이아웃

가장 활용 빈도가 높다!

 

실전으로 가기 전 

LinearLayout 과 LinearLayoutCompat의 차이

API레벨과 무관하게 사용 시 LinearLayoutCompat 사용가능함
LinearLayout은 targetSdk에 해당하는 API레벨 메소드를 지원한다.
==>LinearLayoutCompat 은 구 버전 API에서도 사용할 수 있다.  그럼 이걸 사용해야 겠군!!

 

크게 

<androidx.appcompat.widget.LinearLayoutCompat

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"   ->요렇게 정렬 지정 (디폴트는 horizontal)

></androidx.appcompat.widget.LinearLayoutCompat>

요 태크로 감싸줌!  요거가 걍 기본 셋팅인 듯 보임

 

gravity는 레이아웃에 layout_gravity는 위젯에 보통 지정

 

orientation이 

vertical인 경우는 right,left가 적용안됨.즉 top,bottom가 적용됨
horizontal인 경우 top,bottomㅣ 적용안됨. 즉 right,left가 적용됨

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="#ffff00"
    >
    <!--
    gravity는 해당 뷰의 컨텐츠정렬
    layout_gravity는 해당 뷰가 배치된 레이아웃(부모)을 기준으로 정렬
    -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼1"
        android:layout_gravity="right"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼2"
        android:gravity="right|center_vertical"
        />
</LinearLayout>

 

layout_gravity는 부모기준으로 정렬! 

 

 

 <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="vertical"
        android:background="#ff0000">
        <!--수직방향 정렬은 적용이 안됨,
        (레이아웃의 orientation이 vertical)
            아래 영역은 다른 컴포넌트가 배치 될 영역이므로 침범을 할 수 없다.
             레이아웃이 vertical  : 레이아웃 기준 세로정렬이 안됨
             레이아웃이 horizontal : 레이아웃 기준 가로정렬이 안됨
        -->
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="버튼1"
                android:layout_gravity="center_horizontal"
                />
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="버튼2"
                android:layout_gravity="end"
            />
    </androidx.appcompat.widget.LinearLayoutCompat>

 

 

 

 

android:layout_weight(가중치)
===> 비율이네!! 여백없이 꽉 채울 수 있게 해준다

<androidx.appcompat.widget.LinearLayoutCompat
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="#00ff00"
     android:baselineAligned="true"  >
     <!--android:baselineAligned 디폴트가 true 니까 신경 안 써도 됨 !! -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="텍스트뷰1"
        android:textSize="30sp"
        />
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="텍스트뷰2"
         />
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="텍스트뷰3"
         android:textSize="45sp"
         />
 </androidx.appcompat.widget.LinearLayoutCompat>

<androidx.appcompat.widget.LinearLayoutCompat
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00ffff"
    android:padding="5dp"
    >
    
    
    <!-- weigth를 적용 시킬 때 설정!!
    orentation이 vertical 일 때 : layout_height="0dp"
                 horizontal 일 때 : layout_width="0dp"
    -->

    <Button
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="버튼1"
        />
    <Button
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="wrap_content"
        android:text="버튼2"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"

        />
    <Button
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="버튼3"
        />

</androidx.appcompat.widget.LinearLayoutCompat>

<!--나머지는 밑에가 다 차지-->
<androidx.appcompat.widget.LinearLayoutCompat
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#9bc571"
    android:orientation="vertical"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:text="버튼1"
        android:layout_gravity="center_horizontal"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:text="버튼2"
        android:layout_gravity="center"

        />
    <Button
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:text="버튼3"
        android:layout_gravity="center"
        />

</androidx.appcompat.widget.LinearLayoutCompat>



2.LinearLayout 02 - 자바코드로 만들기
layout 폴더에 activity main 파일을 지워버려 헐....

그럼 작업은 

java폴더에

MainActivity.java 에서 한다....

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("리니어레이아웃 - 자바코드");
       //레이아웃 용 XML파일 불 필요. 아래코드를 주석
       // setContentView(R.layout.activity_main);
       //1.linearlayout객체 생성(이게 태그같은 역할)
        LinearLayoutCompat layoutCompat = new LinearLayoutCompat(this);
        //2.오리엔테이션 설정
        layoutCompat.setOrientation(LinearLayoutCompat.HORIZONTAL);
        //3.리니어 레이아웃의 가로폭/세로폭 설정
        LinearLayoutCompat.LayoutParams layoutParams=
                new LinearLayoutCompat.LayoutParams(LinearLayoutCompat.LayoutParams.MATCH_PARENT,LinearLayoutCompat.LayoutParams.MATCH_PARENT);
        //3-1LayoutParams를 LinearLayout객체에 적용
        layoutCompat.setLayoutParams(layoutParams);
        //3-2배경색
        layoutCompat.setBackgroundColor(Color.rgb(255,255,0));
        //4.button타입 선언
        Button btnOne ,btnTwo;
        //5.button타입 객체생성
        btnOne = new Button(this);
        btnTwo = new Button(this);
        //6.버튼들의 속성 설정
        LinearLayoutCompat.LayoutParams btnLayoutParams=
                new LinearLayoutCompat.LayoutParams(0,LinearLayoutCompat.LayoutParams.WRAP_CONTENT,1);

        btnOne.setLayoutParams(btnLayoutParams);
        btnOne.setText("버튼1");
        btnOne.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25);
        btnOne.setTextColor(Color.RED);
        //※버튼에 가로/세로폭 미 적용시
        //디폴트가 가로폭 ,세로폭은 WRAP_CONTENT임.
        btnTwo.setLayoutParams(btnLayoutParams);
        btnTwo.setText("버튼2");
        //7.레이아웃에 버튼 부착:addView()
        layoutCompat.addView(btnOne);
        layoutCompat.addView(btnTwo);
        //8.이벤트부착
        btnOne.setOnClickListener(view -> Toast.makeText(view.getContext(),"첫 번재 버튼입니다.",Toast.LENGTH_SHORT).show());
        btnTwo.setOnClickListener(view -> Toast.makeText(getApplicationContext(),"두 번재 버튼입니다.",Toast.LENGTH_SHORT).show());
        ///9 레이아웃 전개
        setContentView(layoutCompat);
    }
}

자바코드가.... 더 복잡한 것 같음.....

와!!!!!! 안드로이드다!! 신기하다 !!!!

신기할 겨를 없고

얼른 정리하고 팀프로젝트 해야함...

 

우선 얘도 사용하려면Android Strudio 설치먼저 해야 함

까는건 복잡한게 없으니까 대충넘어가고

 

우선 가상의 핸드폰을 만들것임

우왕 핸드폰이당!!

근데 생각보다 너무 느리고 .... 쓸모가없음

나머지 환경설정이나 하자

 

여기서 만들기!

나는 아아폰을 써서 핸드폰 연동 안해도 되고 그냥 최신버전으로 사용할거임

 

 

새 프로젝트 만들 때

경로랑 이름 언어만 잘 정해주기만 하면 됨

안드로이드에서는 언어를 

java랑 kotlin  요거 두개를 사용한다

나는 java를 배웠으니 java를 선택 함

 

조기서 몇 개만 더 다운 받으면 됨

이 것만 하면 되는 듯?

 

그리고 참고로

엑스포트 할 때는 걍 저렇게 zip 파일로 하고 가져올 땐

걍 풀어서 src파일만 붙여넣기하면 됨 !!! 댜른 설정파일은 그대로 써야하니까 src만 가져오자 !!


안드로이드 프로젝트 구성

그냥 참고

 

1.java폴더 : 안드로이드 프로젝트 생성할 때 입력한이름과 동일한 패키지명이 존재 

            MainActivity.java소스가 있음! 여기서 무엇을 할 지 프로그래밍을 한다고 함,

2.res 폴더  : 앱 개발에 사용하는 이미지,레이아웃,문자열 등 이 들어가는 폴더

                    프로그램에 사용하는 재료들이 들어간다고 보면 됨!

                     대문자사용 x , 정해진 이름의 폴더와 이름규칙이 있단다... 까다롭네

                   /drawable - 이미지 저장폴더

                    /layout  - 레이아웃파일 저장 오늘 여기서 많이 작업함!

                    /values - 진짜 재료들 여기다저장 (문자열,색상,스타일 ...)  

                                   여기에 String 파일이 있는데 여기서 앱 이름을 변경 할 수 있다!

3.manifests 폴더 : 여기 짱 중요 !!! 여기서도 이름을 변경 할 수 있는데 그건 추천하지 않는단다.

4. gradle Scripts폴더 : 빌드 시스템과 관련된 파일이 들어있음 여기서 변경할 건 없다

                                  여기가 약간....설정폴더 같은 느낌이 들었는데 오늘은 크게 뭐 한건 없음


[안드로이드 4대 구성요소(컴포넌트)]   

               -- 이거도 오늘은 자세하겐 안배움(특히 3,4번은 몰라.. 이건 나중에 배우고 정리하자)

1. Activity : 컨트롤러에 해당함

                 액티비티 하나가 화면 하나를 구성한다. , xml로 화면을 구성한다. 
2. Service : 액티비티와 상관없이 백그라운드에서 실행되는 컴포넌트

3.BroadcastReceiver

4.[Content] Provider :애플리케이션간의 데이터 공유를 위해 표준화된 인터페이스를 제공하는 컴포넌트,

 


아무래도 뷰는 중요하지...

하나의 어플리케이션은 하나 혹은 여러개의 액티비티(화면들)로 이루어 진다.

액티비티를 구성하는 요소들을 뷰를 이용하여 만듦

View : TextView,EditText,Button,ImageView.... 눈에 보이는 컴포넌트 

   > ViewGroup : ~~Layout 류들 ,위젯을 담는 틀

         > 그 외의 것들 : 뷰컨테이너-레이아웃이라고 부르진 않지만 다른 위젯을 포함/기본적으로 레이아웃이 정해져 있다.

 

나머지들은 실전에서 사용해 보면서 익히자 !! 

'학원 > ANDROID' 카테고리의 다른 글

01/05 77-2 [Android] GridLayout /LayoutExam  (1) 2023.01.07
01/05 77-1 [Android] FrameLayout  (1) 2023.01.07
01/04 76-4 [Android] TableLayout  (0) 2023.01.04
01/04 76-3 [Android] RelativeLayout  (0) 2023.01.04
01/04 76-2 [Android] LinearLayout  (1) 2023.01.04

+ Recent posts