Layout class는 View widget들을 group화하여

배치하기 위한 용도로사용되는 ViewGroup이다

 

1. LinearLayout

여러 View widget들을 가로또는 세로방향으로 나열할때 사용하는 Layout class이다

widget의 크기와 관계없이 한방향으로 stacked형태로 표시된다

weight 기능을 이용해 View widget간의 상대적인값으로 크기를 설정할수있다 

 

2. RelativeLayout

View widget들이 서로간의 상대적배치관계에따라 화면에 표시될위치가 결정된다

부모 Layout class 자체가 상대적 위치의 기준점으로 사용될수도있다

상대적인 배치 기준점을 지정하지 않는다면 중첩되어 표시된다.

 

3. FramLayout

하나의 자식 View widget만을 표시할때 사용되는 layout class이다

여러 View widget을 추가할경우 중첩되며

마지막에 추가된 View widget이 상위에표시된다

 

4. TableLayout

View widget들을 table(행과 열)로 나누어 표시하는 Laout class이다

TableRow class를 이용해 행을추가하고 View widget을 추가하면 table형태로 표시된다

 

5. ListView와 GridView

View widget을 내용만 달리하여 반복적으로 표시할경우 사용될수있다

'android studio' 카테고리의 다른 글

AdapterView(ListView)  (0) 2019.08.10
view에 도형, 텍스트 그리기  (0) 2019.08.10
Button, RadioButton, CheckBox, ImageView, ImageButton  (0) 2019.08.10
text view  (0) 2019.08.09
Custom ListView  (0) 2019.08.07

1. activity_main.xml

//title과 list부분의 전체적인 style을 설정한다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView
android:id="@+id/tv01"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text = "jusung"
android:textSize="30dp"
android:textStyle="bold"/>
<ListView
android:id="@+id/listView01"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9">
</ListView>
</LinearLayout>

 

2. item_style.xml

//list부분에서 item내부의 style을 설정한다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/icon"
android:layout_width="80dp"
android:layout_height="80dp"/>
<TextView
android:id="@+id/title"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:textStyle="bold"
android:padding="10dp"
android:paddingTop="30dp"/>
<TextView
android:id="@+id/comment"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingTop="30dp"/>
<Button
android:id="@+id/btn_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text = "select"/>
</LinearLayout>

 

3. Data.java

//data를 객체를 활용하기위한 class

package com.example.myapplication;

public class Data {
private int icon;
private String title;
private String comment;

public Data(int icon, String title, String comment){
this.icon = icon;
this.title = title;
this.comment = comment;
} //객체를 생성하기위한 생성자

public int getIcon(){
return icon;
}
public String getTitle(){
return title;
}
public String getComment(){
return comment;
}
}

 

4. MainActivity.java

//data를 가져오기위한 ArrayList생성하고 data를 추가한다

//Data class에 생성자를이용해 객체를 생성하고 add method를이용해 배열에 추가시킨다

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ArrayList<Data> data = null;
private CustomAdapter cAdapter = null;
private ListView listView = null;

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

data = new ArrayList<Data>();

data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
data.add(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));

cAdapter = new CustomAdapter( context: this, R.layout.item_style, data);

//item_style의 layout을 설정하고 위에만들어논 data로 cAdapter를 생성한다

listView = findViewById(R.id.listView01);

//listView를 id를통해 가져온다
listView.setAdapter(cAdapter);

//listView에 Adapter로 setting한다
}
}

5.itemView.java

//item_style에 입력된 data를 memory로 loading하기위해서

//객체화하는과정이필요한데 이를 inflation이라고한다

//item_style에 정의된 style에 data를 가져와 세팅시킨다

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class itemView extends LinearLayout{
private ImageView mIcon;
private TextView mTitle;
private TextView mComment;

//생성자 생성
public itemView(Context context, Data data){
super(context);

//인플레이션: 메모리에 올려 객체화하는것
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.item_style, root: this, attachToRoot: true);
//inflate method를 이용해 item_style를 parameter로 불러오고
//root element를 linearlayout으로 설정하고 root를 포함한다에 true값을 설정

//set Icon
mIcon = findViewById(R.id.icon);
mIcon.setImageResource(data.getIcon());

//set Title
mTitle = findViewById(R.id.title);
mTitle.setText(data.getTitle());

//set Comment
mComment = findViewById(R.id.comment);
mComment.setText(data.getComment());
}//Data class에 getIcon method를 이용해 return값을 받아오고
}//Set함수를 이용해 세팅시킨다

 

6. CustomAdapter.jave

//추상class BaseAdapter을 상속받아서

//getView, getCount method를 이용해 CustomAdapter를 만든다

//getCount는 item의 개수를 return해주는 역할을한다

//item은 item index를 통해 구분을 해주는데

//indexr값을 구하려면 getCount를 통해 전체 item의 개수를 알아야한다

//getView는 item에 보이는 View와 관련이있다

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {
private Context mContext = null;
private int layout = 0;
private ArrayList<Data> mData = null;
private LayoutInflater inflater = null;

//data를 입력하기위한 ArrayList를 만든다

public CustomAdapter(Context context, int layout, ArrayList<Data> mData){
this.mContext = context;
this.layout = layout;
this.mData = mData;
this.inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
} //생성자 생성


public int getCount(){
return mData.size();
} //index를 얻어오기위해 item의 개수를 return
public Object getItem(int position){
return mData.get(position).getTitle();
} //position은 item의 index위치를 가져오기위한 parameter이다
public long getItemId(int position){
return position;
} //position을 매개변수로 index값을 가져온다
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = inflater.inflate(this.layout, parent, attachToRoot: false);
}//만들어진 item view를 convertView를 통해 불러온다.

//하나만 있으면되기때문에 null인경우를 확인후 생성한다
ImageView ico = convertView.findViewById(R.id.icon);
TextView title = convertView.findViewById(R.id.title);
TextView comment = convertView.findViewById(R.id.comment);
Button btn_select = convertView.findViewById(R.id.btn_select);

//만들어논 item_style(image, text, text, button) 을 convertView를통해 불러온다

ico.setImageResource(mData.get(position).getIcon());
title.setText(mData.get(position).getTitle());
comment.setText(mData.get(position).getComment());

//불러온 객체를 position을 활용하여 setting 해줘야한다

if((position%2) == 1){
convertView.setBackgroundColor(0x800000ff);
}else{
convertView.setBackgroundColor(0x200000ff);
} //item들에 색깔을지정하여 구분하기쉽게한다
return convertView;
}
}

 

Result

inflation을 itemView에 설정할경우

MainActivity.java, itemView.java, CustomAdapter.java 파일을

아래와같이 변경한다

4. MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ArrayList<Data> data = null;
private CustomAdapter cAdapter = null;
private ListView listView = null;

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

cAdapter = new CustomAdapter(context: this);
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));
cAdapter.addItem(new Data(R.drawable.semo, title: "hehehe", comment: "hohohoho"));

listView = findViewById(R.id.listView01);
listView.setAdapter(cAdapter);
}
}

 

5.itemView.java

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class itemView extends LinearLayout{
private ImageView mIcon;
private TextView mTitle;
private TextView mComment;

//생성자 생성
public itemView(Context context, Data data){
super(context);

//인플레이션: 메모리에 올려 객체화하는것
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.item_style, this, true);
//inflate method를 이용해 item_style를 parameter로 불러오고
// root element를 linearlayout으로 설정하고 root를 포함한다에 true값을 설정

//set Icon
mIcon = findViewById(R.id.icon);

//set Title
mTitle = findViewById(R.id.title);

//set Comment
mComment = findViewById(R.id.comment);
//Data class에 getIcon method를 이용해 return값을 받아오고
//Set함수를 이용해 세팅시킨다
}
public void setIcon(int icon){mIcon.setImageResource(icon);};
public void setTitle(String data){mTitle.setText(data);};
public void setComment(String data){mComment.setText(data);};
//Data class에 get mothod를 setting하는 작업
}

6. CustomAdapter.jave

package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {
private Context mContext = null;
private ArrayList<Data> mData = new ArrayList<Data>();

public CustomAdapter(Context context){
this.mContext = context;
}

//item 추가위한 method
public void addItem(Data data){
mData.add(data);
} //MainActivity에서 data를 추가시키기위한 method

//item의 개수를 return
public int getCount(){
return mData.size();
}
public Object getItem(int position){
return mData.get(position).getTitle();
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
itemView itemView;
if(convertView == null){
itemView = new itemView(mContext, mData.get(position));
//position을 이용해 data를가져오고 itemView를 생성한다
}else{
itemView = (itemView)convertView;
} //이미 있을경우 itemView를 (itemView)형변환을해준후
// 기존의 convertView로 대채해준다

itemView.setIcon(mData.get(position).getIcon());
itemView.setTitle(mData.get(position).getTitle());
itemView.setComment(mData.get(position).getComment());
//position을 활용하여 itemView에 set method와
// Data class에 get mothod를이용해 세팅한다

if((position%2) == 1){
itemView.setBackgroundColor(0x800000ff);
}else{
itemView.setBackgroundColor(0x200000ff);
}
return itemView;
}
}

'android studio' 카테고리의 다른 글

AdapterView(ListView)  (0) 2019.08.10
view에 도형, 텍스트 그리기  (0) 2019.08.10
Button, RadioButton, CheckBox, ImageView, ImageButton  (0) 2019.08.10
text view  (0) 2019.08.09
android layout  (0) 2019.08.07

+ Recent posts