AndroidStudio
안드로이드 스튜디오를 다운 받는다.
developer.android.com/studio?hl=ko#downloads
activity는 전체화면을 나타낸다
wrap_content
해당 뷰가 그려질 수 있게 필요한 길이만 사용한다.
이 경우 절대적인 값도 넣을 수 있다.
match_parent
부모가 가지는 길이를 모두 채울 때 사용한다. 즉 해당 레이아웃을 취하는 컨테이너의
길이를 모두 채우는 것이다.
단위
안드로이드는 dp라는 단위를 사용한다.
글자크기는 sp라는 단위를 사용한다.
values
values는 css같은 것이라 생각하면된다.
xml을 통해 관리할 수 있다.
안드로이드 스튜디오는 import할때 alt+enter을 누른다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/txtView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="22sp"
android:textColor="@color/myColor"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#aabbcc"
android:text="Click Me"
tools:layout_editor_absoluteX="166dp"
tools:layout_editor_absoluteY="387dp"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.tis.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btn;
TextView txtView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//레이아웃 설정
//res/layout/activity_main.xml
btn=(Button)findViewById(R.id.btn);
txtView=(TextView)findViewById(R.id.txtView);
//btn에 대한 이벤트 처리
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(v==btn){
txtView.setText("즐거운 하루 되세요~");
//알람창을 Toast라고 표현한다.
Toast.makeText(MainActivity.this,"버튼을 눌렀군요",Toast.LENGTH_SHORT).show();
}
}
});
}
}
메모장 예제
LinearLayout (줄 단위로 배치하는 layout)
어플에서 쓸 image는 drawable에 넣어야 한다. (이미지 이름은 소문자!!!!)
바탕화면에 쓸 image는 mipmap에 넣어야 한다.
안드로이드 manifest
theme를 NoactionBar를 사용하면 상단 바가 없어지고
roundIcon을 통해 시작 아이콘을 바꿀 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tis.mymemoapp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/memo_icon"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MemoWriteActivity" />
<activity android:name=".MyShopActivity"></activity>
</application>
</manifest>
activity_main.xml
<?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"
android:padding="16dp"
android:background="@drawable/base"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="MemoApp v1.1"
android:textColor="#ad01ce"
android:textStyle="bold"
android:layout_weight="1"/>
<ImageButton
android:src="@drawable/memo_icon"
android:layout_gravity="center"
android:background="#0000000000"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
</LinearLayout>
MainActivity.java
화면 전환은 Intet를 통해서 한다.
package com.tis.mymemoapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
ImageButton btnIcon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnIcon=(ImageButton)findViewById(R.id.btnIcon);
btnIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"한줄 메모글 쓰러갑니다",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,MemoWriteActivity.class);
//추가적인 내용을 넘기고 싶으면 intent를 통해서 넘긴다
startActivity(intent);
}
});
}
}
memo_write_activity.xml
<?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:background="@drawable/main_bg"
tools:context=".MemoWriteActivity"
android:orientation="vertical">
<EditText
android:id="@+id/editName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="작성자"
android:textColor="@color/colorPrimaryDark"
android:textColorHint="@color/colorPrimaryDark" />
<EditText
android:id="@+id/editMsg"
android:hint="메모 내용"
android:textColorHint="@color/colorPrimaryDark"
android:textColor="@color/colorPrimaryDark"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_margin="5dp"
android:padding="3dp"
android:gravity="right"
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_margin="3dp"
android:id="@+id/btnAdd"
android:text="메모 남기기"
android:background="#eeddcc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:layout_margin="3dp"
android:id="@+id/btnList"
android:text="메모 목록보기"
android:background="#ccddee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<ImageView
android:id="@+id/imgBanner"
android:src="@drawable/banner"
android:padding="10dp"
android:layout_weight="0"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
MemoWriteActivity.java
package com.tis.mymemoapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
public class MemoWriteActivity extends AppCompatActivity {
ImageView imgBanner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memo_write_acitity);
imgBanner = (ImageView)findViewById(R.id.imgBanner);
imgBanner.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MemoWriteActivity.this, "쇼핑몰로 이동", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MemoWriteActivity.this,MyShopActivity.class);
startActivity(intent);
}
});
}
}
WebView
하이브리드 앱이다.
androidManifest
인터넷 사용 허락해야한다.<uses-permission android:name="android.permission.INTERNET"/>
activity_my_shop.xml
<?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:orientation="vertical"
android:padding="16dp"
android:background="@drawable/main_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyShopActivity">
<TextView
android:text="Welcome to MyShop Mall"
android:textColor="@color/colorPrimaryDark"
android:layout_weight="0"
android:textSize="20sp"
android:gravity="center"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<WebView
android:id="@+id/webView"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
</LinearLayout>
MyShopActivity.java
//웹뷰에서 로딩된 웹페이지 링크를 클릭했을 때 웹브라우저로 도망가지 못하도록 처리하기 위해
//WebViewClient를 상속받는 클래스를 만든다.
package com.tis.mymemoapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyShopActivity extends AppCompatActivity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_shop);
webView = (WebView)this.findViewById(R.id.webView);
//웹브라우저 역할을 수행하는 위젯
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true); //자바스크립트가 동작하도록
settings.setJavaScriptCanOpenWindowsAutomatically(true);
String url ="http://192.168.0.15:9090/myshop/index";
webView.loadUrl(url);
//웹뷰에 연결
//was서버 쪽에서는 방화벽 해제
webView.setWebViewClient(new MyWebViewClient());
}//onCreate()---------------------
//웹뷰에서 로딩된 웹페이지 링크를 클릭했을 때 웹브라우저로 도망가지 못하도록 처리하기 위해
//WebViewClient를 상속받는 클래스를 만든다.
private class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url){
wv.loadUrl(url);
return true;
}
}//inner class---------------
@Override
public boolean onKeyDown(int keyCode, KeyEvent e){
if(keyCode==KeyEvent.KEYCODE_BACK && webView.canGoBack()){
webView.goBack();
//이걸 해주어여 WebViewClient에서 뒤로가기가 실행됨
return true;
}
return super.onKeyDown(keyCode,e);
}
}
'개발자 > 국비지원 SW' 카테고리의 다른 글
국비지원 111일차 - AndroidStudio 메모등록, List보여주기(Adapter), SQLite이용 (5) | 2020.10.05 |
---|---|
국비지원 110일차 - React 환경 설정 (0) | 2020.09.29 |
국비지원 108일차 - VueJS db연동 (0) | 2020.09.28 |
국비지원 107일차 - Spring 계층형게시판(페이징,블록,답글) (0) | 2020.09.24 |
국비지원 106일차 - Vue 컴포넌트 Lifecycle, vue-ajax, axios VueCli생성 (0) | 2020.09.23 |