안드로이드 웹 파일 저장 및 통신



안드로이드 스튜디오에 웹 파일을 추가하려면 Android mode에서 app을 오른쪽 버튼 클릭을 하고 아래와 같은 방법으로

assets 폴더를 생성합니다.


그리고 assets 폴더에 추가할 웹 파일을 저장합니다.

웹 파일을 추가할 때는 Android resource file이 아닌 File을 클릭해서 추가해야합니다.



assets 폴더에 추가한 웹 파일을 웹뷰에서 불러오는 방법입니다.

이 예제에서는 assets폴더의 www폴더를 만들고 www폴더 웹 파일을 추가했기 때문에 /www/urladd.html 경로를 사용했습니다.

webView.loadUrl("file:///android_asset/www/urladd.html");


추가한 웹 파일과 앱간의 JavaScript를 이용하여 통신하려면 통신할때 사용할 클래스를 생성해야합니다.

class JavaScriptMethod{
@JavascriptInterface
public void addSite(String url, String title){
for(int i = 0 ; i < data.size(); i++){
if(data.get(i).getUrl().equals(url)){
handler.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javaScript:displayMsg()");
}
});
return;
}
}
Sitedata temp = new Sitedata(url, title);
data.add(temp);
titles.add(temp.toString());
adapter.notifyDataSetChanged();
}
@JavascriptInterface
public void showUrl(){
handler.post(new Runnable() {
@Override
public void run() {
linear.setVisibility(View.VISIBLE);
}
});
}
}

그리고 webView.addJavascriptInterface(new JavaScriptMethod(), "myApp")를 추가하면 아까 만들었던 JavaScriptMethod 클래스를 웹 파일에서 myApp이라는 이름으로 사용할 수 있게 됩니다.


만약 웹 파일에 있는 JavaScript로 만들어진 function을 액티비티에서 호출하려면 아래와 같은 방법을 사용합니다.

이 때 웹 파일에 displayMsg()라는 function이 선언되어 있어야합니다.

webView.loadUrl("javaScript:displayMsg()");


아래 예제는 웹 파일 저장 및 통신, 애니메이션을 사용한 예제입니다.

    


    


위 예제의 모든 코드는 깃허브에서 볼 수 있습니다.

https://github.com/Ywook/AndroidPractice8


안드로이드 웹뷰(WebView) 사용하기


웹뷰

 - 웹뷰는 앱 내에 웹화면을 띄우는 뷰를 말합니다.


웹뷰는 인터넷을 사용하기 때문에 웹뷰를 사용하기 위해선 인터넷 접속권한을 등록해야합니다.

manifests 파일에 들어가서 아래에 밑줄 쳐진 permission을 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.examples.androidpractice8">

<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


웹뷰를 사용할 레이아웃에 들어가서 웹뷰를 추가합니다.

 

 


티비티 파일에서 웹뷰를 선언 및 객체화를 시켜주고 여러가지 설정이 있는데 몇가지 예를 들면


.setJavaScriptEnabled - 웹뷰에서 자바 스크립트 사용

.setSupportZoom - 손으로 확대, 축소를 할 수 있도록 사용

.setBuiltInZoomControls - WebView 내장 Zoom 사용


등이 있습니다.



이 상태에서 loadUrl을 통해 페이지를 불려오려고 하면  외부 브라우저를 실행하게 됩니다.

웹뷰 내에서 웹 페이지를 돌아다니기 위해선 WebViewClient의 shouldOverrideUrlLoading 함수를 사용해야합니다.  


.onPageStarted() - 웹뷰에서 url이 로드 될때 호출 되는 함수

.onPageFinished() - 웹뷰에서 url 로딩이 완료되면 호출 되는 함수 


위에 2가지 메소드를 추가하면 url이 로드될 때, 완료 되었을 때 상황을 설정해 줄 수 있습니다.


아래 코드에서는 로드가 시작되면 ProgressDialog를 실행하고 완료되면 로드가 완료된 url을 editText에 설정해주는 예제입니다.

webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressDialog.setMessage("Loading");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
et.setText(url);

}
});

웹에서 띄우는 팝업 창을 웹뷰를 통해 보여주게 하려면 .setWebChromeClient()를 설정해야 합니다. 


.onProgressChanged() - 위의 코드에서 설정해준 ProgressDialog가 로딩이 완료되면 값이 100이상이 되는데 이 경우

ProgressDialog를 사라자기게 하기 위해 사용합니다.

.onJSAlert() -  웹에서 띄우는 팝업 창 같은 것을 웹뷰에서 보여주기 위해 사용합니다.

webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if(newProgress >= 100) progressDialog.dismiss();
}

@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});


마지막으로 웹뷰에서 url을 로드할때 loadUrl을 사용합니다.

webView.loadUrl("http://www.naver.com");


안드로이드 CustomWidget 만들기


CustomWidget을 만들기 위해서 4단계를 거쳐야 합니다.

  1. CustomWidget의 Layout생성
  2. Widget을 상속받는 Custom클래스 생성
  3. Custom Class에 생성자 추가
  4. Custom Widget에 Custom Layout inflating


1. CustomWidget의 Layout생성

-CustomWidget에 표현하고 싶은 Layout을 만듭니다.


2.Widget을 상속받는 Custom클래스 생성

-아래와 같이 Widget을 상속하는 클래스를 생성합니다.

public class CustomWidget extends LinearLayout {


}

3. Custom Class에 생성자 추가

-여러가지 생성자가 있는데 xml파일에서도 Class에서 만든 CustomWidget을 사용하기 위해서

 AttributeSet이 추가된 생성자를 추가해야합니다.

public class CustomWidget extends LinearLayout {

    public CustomWidget(Context context, @Nullable AttributeSet attrs) {

        super(context, attrs);

    }

}


4.Custom Widget에 Custom Layout inflating

-1번에서 작성했던 Layout을 Custom Widget에 inflating 해줍니다.

public class CustomWidget extends LinearLayout implements View.OnClickListener{
AutoCompleteTextView autoEt;
ImageView img;
Button add_btn;
Button next_btn;

int imageno = 0;

public CustomWidget(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}

private void init(Context context){
LayoutInflater.from(context).inflate(R.layout.customwidget,this);

autoEt = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);
img = (ImageView)findViewById(R.id.image1);
add_btn = (Button)findViewById(R.id.b_add);
next_btn = (Button)findViewById(R.id.b_next);

add_btn.setOnClickListener(this);
next_btn.setOnClickListener(this);
    } 


그리고 만든 CustomWidget을 추가해주고 싶은 xml파일에 추가해주면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="8dp"
android:layout_height="match_parent"
tools:context="com.examples.androidpractice7.MainActivity">


<com.examples.androidpractice7.CustomWidget
android:id="@+id/cswidget"
android:layout_width="match_parent"
android:layout_height="wrap_content">

</com.examples.androidpractice7.CustomWidget>

</LinearLayout>

만약 만든 CustomWidget의 Button클릭 같은 event를 다른 activity파일에서 구현해주고 싶으면 interface를 이용하면 됩니다.


아래는 interface를 이용한 예제입니다.


interface를 사용하기 위해서 추상 메소드를 만들고 setOnAMListiner 호출을 통해 다른 activity에서


추상 메소드를 구현하게  만들었습니다.


public class CustomWidget extends LinearLayout implements View.OnClickListener{
AutoCompleteTextView autoEt;
ImageView img;
Button add_btn;
Button next_btn;

int imageno = 0;

private Boolean M = false;
public CustomWidget(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}

private void init(Context context){
LayoutInflater.from(context).inflate(R.layout.customwidget,this);

autoEt = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);
img = (ImageView)findViewById(R.id.image1);
add_btn = (Button)findViewById(R.id.b_add);
next_btn = (Button)findViewById(R.id.b_next);

add_btn.setOnClickListener(this);
next_btn.setOnClickListener(this);

}

public void setItem(Fruit temp){
autoEt.setText(temp.getName());
img.setImageResource(temp.getImgno());
add_btn.setText("M");
M = true;
}

interface OnAMListener{
void onAdd(String name, int imgno, int p);
void onModify(String name, int imgno, int p);
}

public OnAMListener onAddListener;
public OnAMListener onModifyListener;

public void setOnAMListener(OnAMListener onAddListener){
this.onAddListener = onAddListener;
this.onModifyListener = onAddListener;

}
@Override
public void onClick(View view) {
if(view == add_btn){
if(M){
onModifyListener.onModify(autoEt.getText().toString(), Fruit.image[imageno], imageno);
add_btn.setText("Add");
M = false;
autoEt.setText("");
}
else {
onAddListener.onAdd(autoEt.getText().toString(), Fruit.image[imageno], imageno);
autoEt.setText("");
}
}else{
if(imageno == Fruit.image.length -1) imageno = -1;
img.setImageResource(Fruit.image[++imageno]);
}

}
}


아래는 CustomWidget, interface을 이용해 만든 예제입니다

 


 


 




위 앱의 모든 코드는 GitHub에서 볼 수 있습니다!

https://github.com/Ywook/AndroidPractice7





안드로이드 Custom GridView 사용하기



ListView가 어댑터로부터 데이터를 받아서 리스트 형식으로 출력하는 방식이라면 GridView는 어댑터로부터 데이터를 받아서 테이블 형식으로

출력해주는 방식입니다.


 

GridView의 대표적인 속성으로 아래 3가지가 있습니다.

android:verticalSpacing=""

android:horizontalSpacing=""

android:numColumns=""


verticalSpacing은 item사이의 세로 간격을 지정하는 속성

horizontalSpacing은 item사이의 가로 간격

numColumns는 GridView의 행에 나열될 Column의 개수를 지정하는 속성입니다. 


Custom GridView를 만들기 위해서는 Custom ListView와 마찬가지로 GridView에 들어갈 item의 layout파일을 작성합니다.


그리고 BaseAdapter를 상속하는 Adapter 클래스를 만들고 Adapter와 GridView를 연결해 주면 됩니다.

public class GridViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> data;

public GridViewAdapter(Context context, ArrayList<Fruit> data) {
this.context = context;
this.data = data;
}

@Override
public int getCount() {
return data.size();
}

@Override
public Object getItem(int i) {
return data.get(i);
}

@Override
public long getItemId(int i) {
return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

return null;

}
}


안드로이드 Custom ListView 만들기



Custom ListView는 기존 Listview처럼 문자열이나 이미지로만 표시하는게 아니라 원하는 레이아웃으로 항목에 표시하는 리스트 뷰입니다.


원하는 대로 항목을 표시하기 위해서 먼저  보여줄 Layout을 만듭니다.


그리고 만든 Layout을 항목에 보여주기 위해서 BaseAdapter를 상속받는 새로운 클래스를 정의하고 


다음 4개의 메소드를  Override해야 합니다.

public class CustomAdapter extends BaseAdapter {

@Override
public int getCount() {
return 0;
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
return null;
}
}


getCount() - ListView에서 사용할 데이터의 총개수

getItem(int i) - 해당 i번째의 데이터 값

getItemId(int i) - 해당 i번째 id 값

getView(int i, View view, ViewGroup viewGroup) - 이 메소드에서 화면에 보여질 아이템을 구성합니다.


getView는 스마트폰에 화면이 보여질 때 화면 구성을 위해서 호출됩니다.


즉, 데이터가 100개 들어있어도 화면에 10개의 item만 보인다면 getView를 10번 호출하고 화면에 안보이다가


다시 보이게 되는 item이 생기면 다시 getView 를 호출합니다.


ListView는 View를 재활용 하기 때문에 최초 한번만 View값이 NULL이 들어오고 그 후에 호출 되면 이미 생성된 View가 들어오게 됩니다.


따라서 아래와 같이 View가 NULL일 때만 inflate를 해주면 됩니다.

public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.list_item, null);
}
TextView txt1 = (TextView) view.findViewById(R.id.textName);
TextView txt2 = (TextView) view.findViewById(R.id.textTel);

txt1.setText(datalist.get(i).getName());
txt2.setText(datalist.get(i).getTell());


return view;
}


아래 예제는 Custom ListView를 사용한 예제입니다.

 

 





위 예제 코드는 gitHub에서 볼 수 있습니다.

https://github.com/Ywook/Android.practice6







안드로이드 스튜디오 ListView, Intent 사용하기


ListView는 안드로이드에서 지원하는 위젯 중 하나이고 세로로 스크롤되는 목록에 항목을 표시해주는 역할을 합니다.


ListView에 나타나는 아이템들은 ArrayAdapter를 통해서 추가할 수 있습니다.


간단한 데이터를 다룰때는 ArrayAdapter 클래스를 그대로 사용하기도 하지만 사용자가 원하는 형태로 효과를 주고 싶으면


ArrayAdapter클래스를 상속 받아서 사용해야합니다.



ListView를 사용하기 위해서 해당 activity의 res/layout파일에 ListView를 추가해줍니다.




그리고 activity파일로 돌아가서 ListView를 객체화 시킵니다.


ListView에 아이템을 추가하기 위해선 Adapter를 사용해야 합니다.


즉, ListView는 Adapter를 통해 데이터를 보여주는 형식의 뷰입니다.


ListView는 .setAdapter()를 사용해서 Adapter를 설정해줄 수 있습니다.


아래에서 ArrayAdapter의 생성자 호출에 사용된 인자는 다음과 같습니다. 

  • this - context (일반적으로 Adapter를 포함하는 Activity의 instance)
  • android.R.layout.simple_list_item_1 - 어떤 resource를 넣느냐에 따라서 ListView를 구성하는 item의 text 형태나 모양                 이 바뀌는데 안드로이드에서 지원하는 것을 사용
  • data - Adapter에 적용할 data

ArrayList<String> data = new ArrayList<String>();

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data);

Listview.setAdapter(adapter);


ListView의 아이템 클릭 이벤트는 .setOnItemClickListenr를 이용해서 설정할 수 있습니다.

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

}
});

그리고 ListView 아이템이 변경될 때 화면에 반영되기 위해서 adapter의 .notifyDataSetChanged()를 사용해야합니다.


adapter.notifyDataSetChanged();


안드로이드 어플리케이션을 구성하는 네 가지 요소에는 

  • Activity  - 화면을 구성하는 기본적인 컴포넌트
  • Service    - 화면 없이 백그라운드에서 동작하는 컴포넌트   
  • BroadCast Receiver - 문자메세지, 배터리 방전 등의 방송을 받는 수신자
  • Content Provider    - 응용 앱 사이에 데이터를 공유하기 위한 컴포넌트

가 있습니다.


Intent는 어플리케이션 구성 요소 간에 작업 수행을 위한 정보를 전달, 실행하는 역할을 합니다. 


예를 들면 액티비티간의 화면 전환이 있습니다.


Intent는 명시적 인텐트(Explicit Intent)암시적 인텐트(Implicit Intent)로 나눌 수 있습니다.


Intent에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 알 수 있는 경우에는 명시적 인텐트


미리 정의된 액션(Action)을 지정해서 안드로이드에서 제공하는 기존 응용 프로그램을 실행하는 것을 암시적 인텐트라고 합니다.


액티비티의 호출간에 정보를 주고 받을 수 있는데 정보를 줄때는 putExtra를 사용하고 

Intent intent = new Intent(this, SecondActivity.class);

intent.putExtra("tag",et.getText().toString());

startActivity(intent);


정보를 받을때는 Get데이터타입Extra를 사용합니다.

Intent intent = getIntent();

String str = intent.getStringExtra("tag");


사용자 정의 객체도 주고 받을 수 있는데 이때는 Parcelable 타입을 사용하면 됩니다.



아래 앱은 ListView, Intent를 사용해서 만든 앱입니다.


 


 


 





전체 코드는 gitHub에서 볼 수 있습니다

https://github.com/Ywook/Android.practice5


안드로이드 스튜디오 Fragment, AlertDialog, Snackbar 사용하기



Fragment란?

아래 사이트에 잘 나와있습니다.

- https://developer.android.com/guide/components/fragments.html?hl=ko#Design



public class Fragment1 extends Fragment {

@Nullable

@Override


public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

this.inflater = inflater;

v = inflater.inflate(R.layout.fragment1, container, false );

return v;

}


Fragment를 extends 하고 Fragment에 붙일 layout을 작성하고 inflate를 해줍니다.


그리고 Fragment를 붙이고 싶은 Activity의 layout에 아래 코드를 추가합니다.


<fragment

    android:id="@+id/fragment"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:name="com.examples.androidpractice4_1.Fragment1"

/>


 name에는 들어가는 Activity에 들어가는 Fragment의 위치를 작성해줍니다.




AlertDialog는 안드로이드의 대화상자를 말합니다.


기본적인 형태의 AlertDialog는 Activity 코드 작성만을 통해 사용할 수 있습니다.

AlertDialog.Builder dialog = new AlertDialog.Builder(this);

dialog.setTitle("제목")
.setMessage("내용")
.setNegativeButton("닫기", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {

}
})
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {

}
})
.show();

setTitle은 제목 설정, setMessage는 내용설정 

setNegativeButton은 왼쪽에 있는 버튼

setPositiveButton은 오른쪽에 있는 버튼을 나타냅니다.

그리고 new OnClickListener 설정을 통해서 버튼 클릭 이벤트를 설정해 줄 수 있습니다.


AlertDialog의 모양을 원하는대로 바꾸고 싶다면 새로운 xml 파일을 만들고 .setView(int layoutResId)를 통해 붙여주면 됩니다.




Snackbar를 사용하기 위해서는 dependecy를 추가해야합니다.

File에서 ProjectStructure를 클릭해서 들어갑니다.


그리고 Dependencies를 클릭하고 + 버튼을 클릭합니다.


그리고 design을 입력하고 나오는 칸을 클릭하고 Ok를 누르면 Snackbar를 사용할 수 있습니다.


아래 앱은 Fragment, AlertDialog, Snackbar 사용해서 만든 앱입니다.


 

-

 

-

 


-


깃 허브 주소입니다.


https://github.com/Ywook/Android.practice4_1











안드로이드 TabHost 사용해서 앱 만들기 


TabHost를 사용하고자 하는 layout 파일에 tabHost를 추가해줍니다.


TabHost의 layout을 작성한 후에 자바 파일에서 TabHost를 추가해줍니다.


mTabHost = (TabHost)findViewById(R.id.tabhost);
mTabHost
.setup();


코드를 실행해보면 아직 Tab이 추가가 안된 화면을 볼 수 있는데 이유는 addTab을 하지 않았기 때문입니다


TabSpec를 만들고 addTab을 해주면 화면에 Tab이 추가된 것을 볼 수 있습니다.


여기서 newTabSpec에 들어가는 String은 Tab에 대한 specification을 추가하는 것이고 반드시 null이 아니여야 합니다.


setContent를 통해 추가하길 원하는 tab의 아이디를 넣고 setIndicator에서 Tab에 나타나는 글자를 설정해줄 수 있습니다.


TabHost.TabSpec tab1 = tabHost.newTabSpec("1").setContent(R.id.tab1).setIndicator("Tab1 이름");

TabHost.TabSpec tab2 = tabHost.newTabSpec("2").setContent(R.id.tab2).setIndicator("Tab2 이름");


mTabHost.addTab(tab1);

mTabHost.addTab(tab2);




 



 





위 앱은 TabHost를 사용해서 만들었습니다.


앱의 전체 코드는 GitHub에서 볼 수 있습니다.


https://github.com/Ywook/Ss3-2





안드로이드 옵션 메뉴(OptionMenu) 사용해서 앱 만들기



안드로이드에서 옵션 메뉴를 사용하기 위해서는 세 단계를 걸쳐야합니다.


메뉴 xml파일 생성 -> 자바파일 작성을 통해 액티비티에 메뉴 붙이기 -> 메뉴 별로 기능 구현하기


res폴더 안에 menu폴더가 있으면 menu.xml을 생성하고 menu폴더가 없으면 menu폴더를 만든후 menu.xml파일을 생성합니다.






menu.xml 파일에 넣고 싶은 item들을 넣은 후에 옵션 메뉴를 사용하고자 하는 Activity의 자바 파일에서


onCreateOptionMenu() 메소드를 Override 한 후 MenuInflater를 통해 옵션 메뉴를 객체화 시켜줍니다.

@Override

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.menu, menu);

return super.onCreateOptionsMenu(menu);

}


그리고 onOptionItemSelected(MenuItem item) 메소드를 Override 하고 메뉴의 기능을 구현해줍니다.

@Override

public boolean onOptionItemSelected(MenuItem item) {

switch (item.getItemId()){

case R.id.mnu:

layout.setBackgroundColor(Color.RED);

break;

return super.onOptionItemSelected(item);

}




 


 


 




위의 앱은 옵션 메뉴(OptionMenu)를 사용해서 만들었습니다.


여태까지 만들었던 앱에는 없었던 그림 회전하기와 그림 2배 확대하기를 추가했습니다.


그림을 회전하기 위해서는 setRotation(float rotation) 메소드를 호출하면 되는데 이 메소드는 처음 각도를 기준으로 들어오는 수 만큼


각도를 바꾸는 메소드입니다.


그림을 2배 확대하기 위한 메소드는 setScaleX(float scale), setScaleY(float scale) 메소드를 사용했습니다.


처음 비율을 기준으로 들어오는 scale만큼 x, y의 넓이를 확대시켜주는 메소드입니다.


확대를 적용하고 싶지 않다면 scale값을 1을 넣어주면 처음처럼 돌아갑니다.



위 앱의 모든 코드는 GitHub에서 볼 수 있습니다.


https://github.com/Ywook/Ss3-1


 






안드로이드 RelativeLayout 사용하기



RelativeLayout은 상대적 위치에 기반하여 뷰들을 배치하는 layout입니다.


이 layout을 사용할 경우에는 기준이 되는 어떤 뷰의 왼쪽, 오른쪽, 위, 아래에 배치하는 방식으로 뷰를 배치해야 합니다.


android:layout_alignTop="@id/tag" tag라는 이름을 가진 뷰의 상단 가장자리에 배치


android:layout_alignBaseline="@id/tag" tag라는 이름을 가진 뷰의 중간자리에 배치


android:layout_alignBottom="@id/tag" tag라는 이름을 가진 뷰의 하단 가장자리에 배치


android:layout_above="@id/tag" tag라는 이름을 가진 뷰 위에 배치


android:layout_below="@id/tag" tag라는 이름을 가진 뷰 아래에 배치


android:layout_toRightOf="@id/tagtag라는 이름을 가진 뷰 오른쪽에 배치


android:layout_toLeftOf="@id/tag" tag라는 이름을 가진 뷰 왼쪽에 배치


android:layout_alignLeft="@id/tagtag라는 이름을 가진 뷰의 왼쪽 가장자리에 배치


android:layout_alignRight="@id/tagtag라는 이름을 가진 뷰의 오른쪽 가장자리에 배치




위의 속성들을 적용해서 만든 화면입니다.


android:layout_alignTop="@id/기준위젯"

android:layout_toLeftOf="@id/기준위젯


두 개의 속성을 동시에 사용하면  1번 자리에 배치됩니다.


android:layout_alignBaseline="@id/기준위젯"

android:layout_toLeftOf="@id/기준위젯"


2번자리에 배치됩니다.



위의 코드는 GitHub에서 볼 수 있습니다.

https://github.com/Ywook/layout/blob/master/app/src/main/res/layout/relativelayout.xml


+ Recent posts