'안드로이드 앱 만들기'에 해당되는 글 43건

  1. 2020.08.15 Recycler View
  2. 2020.08.13 카메라
  3. 2020.08.09 Navigation Menu 커스텀
  4. 2020.08.06 Web View
  5. 2020.08.06 Shared Preferences
  6. 2020.08.06 Navigation Menu
  7. 2020.08.02 List View
  8. 2020.08.01 패키지구조 & 역할
  9. 2020.08.01 Image View & Toast
  10. 2020.08.01 intent 화면전환

뷰를 재활용하면서 무한으로 리스트 뷰를 생성할 수 있는 커스텀적인 리스트 뷰

 

null != arraylistMusic이라는 조건식이 참(true)이라면 ?뒤에 이어지는 첫 번째 arralistMusic.size()를 수행하게 되고 반대로 거짓(false)이라면 0을 반환

 

.java 파일 만드는 법

좌측 app 폴더에 java 파일 클릭

com.example.recyclerview 폴더 우클릭

new > Java Class

 

-------------------------------------------------

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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbarFadeDuration="0"
        android:scrollbarSize="5dp"
        android:scrollbarThumbVertical="@android:color/darker_gray"
        android:scrollbars="vertical"
        android:layout_weight="1">

    </androidx.recyclerview.widget.RecyclerView>

    <Button
        android:id="@+id/btn_add"
        android:layout_weight="8"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="추가"/>

</LinearLayout>

-------------------------------------------------

 

item_list.xml

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/iv_profile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="khon"/>

            <TextView
                android:id="@+id/tv_content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="리사이클러뷰"/>

        </LinearLayout>
    </LinearLayout>

</LinearLayout>

-------------------------------------------------

 

 

MainData.java

package com.example.recyclerview;

public class MainData {

    private int iv_profile;
    private String tv_name;
    private String tv_content;


    // alt + ins 키 constructor
    public MainData(int iv_profile, String tv_name, String tv_content) {
        this.iv_profile = iv_profile;
        this.tv_name = tv_name;
        this.tv_content = tv_content;
    }

    // alt + ins 키 Getter and Setter
    public int getIv_profile() {
        return iv_profile;
    }

    public void setIv_profile(int iv_profile) {
        this.iv_profile = iv_profile;
    }

    public String getTv_name() {
        return tv_name;
    }

    public void setTv_name(String tv_name) {
        this.tv_name = tv_name;
    }

    public String getTv_content() {
        return tv_content;
    }

    public void setTv_content(String tv_content) {
        this.tv_content = tv_content;
    }
}

-------------------------------------------------

 

 

MainAdapter.java

package com.example.recyclerview;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.CusteomViewHolder> {

    private ArrayList<MainData> arrayList;

    // alt + ins 키 comstructor
    public MainAdapter(ArrayList<MainData> arrayList) {
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public MainAdapter.CusteomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,parent,false);
        CusteomViewHolder holder = new CusteomViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull final MainAdapter.CusteomViewHolder holder, int position) {
        holder.iv_prifile.setImageResource(arrayList.get(position).getIv_profile());
        holder.tv_name.setText(arrayList.get(position).getTv_name());
        holder.tv_content.setText(arrayList.get(position).getTv_content());

        holder.itemView.setTag(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String curName = holder.tv_name.getText().toString();
                Toast.makeText(view.getContext(), curName, Toast.LENGTH_SHORT).show();
            }
        });

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                remove(holder.getAdapterPosition());

                return true;
            }
        });

    }

    @Override
    public int getItemCount() {
        return (null != arrayList ? arrayList.size() : 0);
    }

    public void remove(int position) {
        try {
            arrayList.remove(position);
            notifyItemRemoved(position);
        }catch (IndexOutOfBoundsException ex) {
            ex.printStackTrace(); // 예외 상황이 벌어졌을때 강제 실행
        }
    }

    public class CusteomViewHolder extends RecyclerView.ViewHolder {

        protected ImageView iv_prifile;
        protected TextView tv_name;
        protected TextView tv_content;

        public CusteomViewHolder(@NonNull View itemView) {
            super(itemView);
            this.iv_prifile = (ImageView) itemView.findViewById(R.id.iv_profile);
            this.tv_name = (TextView) itemView.findViewById(R.id.tv_name);
            this.tv_content = (TextView) itemView.findViewById(R.id.tv_content);
        }
    }
}

-------------------------------------------------

 

 

build.gradle (:app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.1"

    defaultConfig {
        applicationId "com.example.recyclerview"
        minSdkVersion 15
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

-------------------------------------------------

 

 

MainActivity.java

package com.example.recyclerview;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ArrayList<MainData> arrayList;
    private MainAdapter mainAdapter;
    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManger;

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

        recyclerView = (RecyclerView)findViewById(R.id.rv);
        linearLayoutManger = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManger);

        arrayList = new ArrayList<>();

        mainAdapter = new MainAdapter(arrayList);
        recyclerView.setAdapter(mainAdapter);

        Button btn_add = (Button)findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MainData mainData = new MainData(R.mipmap.ic_launcher,"khon", "리사이클러뷰");
                arrayList.add(mainData);
                mainAdapter.notifyDataSetChanged();
            }
        });
    }
}

'안드로이드 앱 만들기' 카테고리의 다른 글

Log 출력 및 주석  (0) 2020.08.17
Fragment  (0) 2020.08.17
카메라  (0) 2020.08.13
Navigation Menu 커스텀  (0) 2020.08.09
Web View  (0) 2020.08.06
Posted by khon98
,

FIle > New > Android Resource File 

xml 파일 추가시 Resource type에서 XML로 바꿔주면 됨

 

onActivityResult에 빨간줄이 있어도 실행하는데 지장 없음

 

--------------------------------------

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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <ImageView
            android:id="@+id/iv_result"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        
    </LinearLayout>
    
    <LinearLayout
        android:orientation="horizontal"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        
        <Button
            android:id="@+id/btn_capture"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="촬영"/>
        
    </LinearLayout>

</LinearLayout>

--------------------------------------

 

 

file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path
    name="cache"
    path="." /> <!--Context.getCacheDir() 내부 저장소-->
<files-path
    name="files"
    path="." /> <!--Context.getFilesDir() 내부 저장소-->

<external-path
    name="external"
    path="."/>  <!--  Environment.getExternalStorageDirectory() 외부 저장소-->
<external-cache-path
    name="external-cache"
    path="."/> <!--  Context.getExternalCacheDir() 외부 저장소-->
<external-files-path
    name="external-files"
    path="."/> <!--  Context.getExternalFilesDir() 외부 저장소-->

</paths>

--------------------------------------

 

 

MainActivity.java

package com.example.camera;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;

import android.Manifest;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_IMAGE_CAPTURE = 672;
    private String imageFilePath;
    private Uri photoUri;

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

        //권한 체크
        TedPermission.with(getApplicationContext())
                .setPermissionListener(permissionListener)
                .setRationaleMessage("카메라 권한이 필요합니다")
                .setDeniedMessage("거부하셨습니다")
                .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
                .check();

        findViewById(R.id.btn_capture).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 촬영 하는 기본 카메라 앱을 띄우는 구문
                if(intent.resolveActivity(getPackageManager()) != null) {
                    File photoFile = null;
                    try {
                        photoFile = createimageFile();
                    } catch (IOException e) {

                    }

                    if(photoFile != null) {
                        photoUri = FileProvider.getUriForFile(getApplicationContext(), getPackageName(), photoFile);
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
                        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); // 다음 인텐트로 화면 전환이 일어났을때 다음 액티비티로 부터 값을 다시 가져옴
                    }
                }
            }

            private File createimageFile() throws IOException {
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                String imageFimeNAme = "TEST_" + timeStamp + "_";
                File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
                File image = File.createTempFile(
                        imageFimeNAme,
                        ".jpg",
                        storageDir
                );
                imageFilePath = image.getAbsolutePath();
                return image;
            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath);
            ExifInterface exif = null;

            try {
                exif = new ExifInterface(imageFilePath);
            } catch (IOException e) {
                e.printStackTrace();
            }

            int exifOrientation;
            int exifDegree;

            if (exif != null) {
                exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                exifDegree = exifOrientationToDegreess(exifOrientation);
            } else {
                exifDegree = 0;
            }

            ((ImageView) findViewById(R.id.iv_result)).setImageBitmap(rotate(bitmap,exifDegree));
        }
    }

    private int exifOrientationToDegreess(int exifOrientation) {
        if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
            return 90;
        } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
            return 180;
        } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
            return 270;
        }
        return 0;
    }

    private Bitmap rotate(Bitmap bitmap, float degree) {
        Matrix matrix = new Matrix();
        matrix.postRotate(degree);
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix,true);
    }

    PermissionListener permissionListener = new PermissionListener() {
        @Override
        // permission 허용이 됐을때 일어나는 액션을 적어주는 곳
        public void onPermissionGranted() {
            Toast.makeText(getApplicationContext(), "권한이 허용됨", Toast.LENGTH_SHORT).show();
        }

        @Override
        // permission을 거절 했을때 액션을 적어주는 곳
        public void onPermissionDenied(ArrayList<String> deniedPermissions) {
            Toast.makeText(getApplicationContext(), "권한이 거부됨", Toast.LENGTH_SHORT).show();
        }
    };
}

--------------------------------------

 

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.camera">
    
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>

        <provider
            android:authorities="com.example.camera"
            android:name="androidx.core.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">

            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>

        </provider>
    </application>

</manifest>

--------------------------------------

 

 

build.gradle (:app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.1"

    defaultConfig {
        applicationId "com.example.camera"
        minSdkVersion 15
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'gun0912.ted:tedpermission:2.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

'안드로이드 앱 만들기' 카테고리의 다른 글

Fragment  (0) 2020.08.17
Recycler View  (0) 2020.08.15
Navigation Menu 커스텀  (0) 2020.08.09
Web View  (0) 2020.08.06
Shared Preferences  (0) 2020.08.06
Posted by khon98
,

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/btn_open"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="khon"/>

    </LinearLayout>
    <include layout = "@layout/activity_drawer"/> // main.xml에서 drawer.xml을 연결 시킴

</androidx.drawerlayout.widget.DrawerLayout>

--------------------------------------------------------

 

 

activity_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#1EC0D5"
    android:id="@+id/drawer"
    android:orientation="vertical"> // 슬라이드 메뉴를 직접 만들어준다고 생각하면 됨

    <Button
        android:id="@+id/btn_close"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="메뉴 닫기"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="khon 메뉴"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#3299C8"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="테스트 메뉴"/>

    </LinearLayout>

</LinearLayout>

--------------------------------------------------------------

 

 

MainActivity.java

package com.example.customnaviexample;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout drawerLayout;
    private View drawerView;

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

        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        drawerView = (View)findViewById(R.id.drawer);

        Button btn_open = (Button)findViewById(R.id.btn_open);
        btn_open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                drawerLayout.openDrawer(drawerView); // 버튼을 눌렀을때 메뉴가 열려라 라는 뜻
            }
        });

        Button btn_close = (Button)findViewById(R.id.btn_close);
        btn_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                drawerLayout.closeDrawers();
            }
        });

        drawerLayout.setDrawerListener(listener);
        drawerView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                return true;
            }
        });
    }

    DrawerLayout.DrawerListener listener = new DrawerLayout.DrawerListener() {
        // 왼쪽이나 오른쪽 슬라이드 했을때 이곳에서 선택 값을 받아옴
        @Override
        public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {

        }

        @Override
        public void onDrawerOpened(@NonNull View drawerView) {

        }

        @Override
        public void onDrawerClosed(@NonNull View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    };
}

'안드로이드 앱 만들기' 카테고리의 다른 글

Recycler View  (0) 2020.08.15
카메라  (0) 2020.08.13
Web View  (0) 2020.08.06
Shared Preferences  (0) 2020.08.06
Navigation Menu  (0) 2020.08.06
Posted by khon98
,

shouldOverrideUrlLoading - 현재 페이지에 url을 읽어올 수 있는 메서드(새 창을 불러오거나 특정 페이지 특수한 기능을 넣을 수 있음)

 

<uses-permission android:name="android.permission.INTERNET"/> // 인터넷 권한 허용

ctrl + o 단축키 자주 사용

 

------------------------------------

 

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"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </WebView>

</LinearLayout>

------------------------------------

 

 

MainActivity.java

package com.example.webviewexample;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView mWebView;

    private String myUrl = "http://";

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

        mWebView = (WebView) findViewById(R.id.webView);
        mWebView.getSettings().setJavaScriptEnabled(true);

        mWebView.loadUrl("https://khon98.tistory.com/");
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.setWebViewClient(new WebViewClient());
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class WebViewClientClass extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) { // Ctrl + o
            Log.d("check URL", url);
            view.loadUrl(url);
            return true;
        }
    }
}

------------------------------------

 

 

AndroidManifest.xml

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

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>

------------------------------------

'안드로이드 앱 만들기' 카테고리의 다른 글

카메라  (0) 2020.08.13
Navigation Menu 커스텀  (0) 2020.08.09
Shared Preferences  (0) 2020.08.06
Navigation Menu  (0) 2020.08.06
List View  (0) 2020.08.02
Posted by khon98
,

Shared Preferences - 임시로 저장시키거나 앱이 지워지기 전까지 데이터를 남겨 놓고 싶다 할 때 많이 사용하는 함수

 

설정 화면에서 많이 쓰임

 

앱을 삭제 할 시 모든 데이터가 사라짐

 

---------------------------------------------------

 

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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et_save"
        android:layout_width="100dp"
        android:layout_height="wrap_content" />

</LinearLayout>

---------------------------------------------------

 

 

MainActivity.java

package com.example.shared;

import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText et_save;
    String shared = "file";

    @Override
    protected void onCreate(Bundle savedInstanceState) { // 앱이 실행 될 부분
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_save = (EditText)findViewById(R.id.et_save);

        SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);
        String value = sharedPreferences.getString("khon", "");
        et_save.setText(value);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        String value = et_save.getText().toString();
        editor.putString("khon",value);
        editor.commit(); // 저장을 완료 하라는 뜻
    }
}

---------------------------------------------------

'안드로이드 앱 만들기' 카테고리의 다른 글

Navigation Menu 커스텀  (0) 2020.08.09
Web View  (0) 2020.08.06
Navigation Menu  (0) 2020.08.06
List View  (0) 2020.08.02
패키지구조 & 역할  (0) 2020.08.01
Posted by khon98
,

res 폴더 안에 drawable 폴더에 원하는 이미지를 넣고 바꿔서 사용할 수 있음

'안드로이드 앱 만들기' 카테고리의 다른 글

Web View  (0) 2020.08.06
Shared Preferences  (0) 2020.08.06
List View  (0) 2020.08.02
패키지구조 & 역할  (0) 2020.08.01
Image View & Toast  (0) 2020.08.01
Posted by khon98
,

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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="List"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>

</LinearLayout>

----------------------------------------------

 

MainActivity.java

package com.example.list;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ListView list;

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

        list = (ListView)findViewById(R.id.list);

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

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data); // 어댑터 생성
        list.setAdapter(adapter);

        data.add("khon");
        data.add("안드로이드");
        data.add("초밥");
        adapter.notifyDataSetChanged(); // 현재 상태를 저장하겠다는 의미를 가지고 있음
    }
}

'안드로이드 앱 만들기' 카테고리의 다른 글

Shared Preferences  (0) 2020.08.06
Navigation Menu  (0) 2020.08.06
패키지구조 & 역할  (0) 2020.08.01
Image View & Toast  (0) 2020.08.01
intent 화면전환  (0) 2020.08.01
Posted by khon98
,

AndroidManifest.xml 띄우는 법

1. 좌측 app 클릭

2. manifests 폴더 클릭

 

dpi - 안드로이드의 해상도 단위

 

 

AndroidManifest.xml

-------------------------------------

<?xml version="1.0" encoding="utf-8"?>

<mainfest xmlns:android="http://schemas.android.com/apk/res/android"

       package="com.example.intent">

 

       <application

             android:allowBackup="true"

             android:icon="@mipmap/ic_launcher" // 앱 아이콘 설정(현재는 기본 이미지)

             android:label="@String/app_name" // 빌드 진행 시 나오는 이름(바꿀 수 있음)

             android:roundIcon="@mipmap/ic_launcher_round" // 아이콘 테두리를 둥글게 만듦

             android:supportsRt1="true"

             android:theme="@style/Apptheme"> // 앱의 컬러

             <acticity android:name=".SubActivity"></acticity>

             <acticity android:name=".MainActivity">

                  <intent-filter>

                       <action android:name="android.intent.action.MAIN" />

 

                       <category android:name="android.intent.category.LAUNCHER" />

                  </intent-filter>

             </acticity>

       </application>

 

</mainfest>

-------------------------------------

'안드로이드 앱 만들기' 카테고리의 다른 글

Navigation Menu  (0) 2020.08.06
List View  (0) 2020.08.02
Image View & Toast  (0) 2020.08.01
intent 화면전환  (0) 2020.08.01
EditText & Button  (0) 2020.07.28
Posted by khon98
,

gravity - 왼쪽 오른쪽 가운데 정렬을 정할 수 있음

기본값은 Left

 

android:gravity - 위젯 자체로의 정렬 값을 지정해주는 것

android:layout_gravity - 위젯 자체가 아닌 위젯을 감싸주고 있는 레이아웃의 정렬 값을 지정해주는 것

 

activity_main.xml

----------------------------------

<LinearLayout

 

>

 

<EditText

     android:id"@+id/et_test"

     android:layout_width="200dp"

     android:layout_height="wrap_content"/>

 

<Button

     android:id="@+id/btn_move"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     andorid:text="이동"/>

 

<ImageView

     android:id="@+id/khon"

     android:layout_width="100dp"

     android:layout_height="100dp"

     android:src="@mipmap/ic_launcher"/>

 

</LinearLayout>

----------------------------------

 

 

MainActivity.java

----------------------------------

package com.example.intent;

 

import ...

 

public class MainActivity extends AppCompatActivity {

 

      private Button btn_move;

      private EditText et_test;

      private String str;

      ImageView test;

 

      @Override

      protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

 

            et_test = findViewById(R.id.et_test);

 

 

            btn_move = findViewById(R.id.btn_move);

            btn_move.setOnClickListener(new View.OnClickListener( ) {

                 @Override

                 public void onClick(View view) {

                      str = et_test.getText( ).toString( );

                      Intent intent = new Intent(  packageContext: MainActivity.this , SubActivity.class);

                      intent.putExtra(  name: "str",str);

                      startActivity(intent); // 액티비티 이동

                 }

            }};

 

            test = (ImageView)findViewById(R.id.khon);

            test.setOnClickListener(new View.OnClickListener( ) {

                @Override

                public void ocClick(View view) {

                     Toast.makeText(getApplicationConText( ),  text: "khon98",Toast.LENGTH_SHORT).show( );

                }

            }};

      }

}

----------------------------------

'안드로이드 앱 만들기' 카테고리의 다른 글

List View  (0) 2020.08.02
패키지구조 & 역할  (0) 2020.08.01
intent 화면전환  (0) 2020.08.01
EditText & Button  (0) 2020.07.28
Text View 만들기  (0) 2020.07.25
Posted by khon98
,

intent - a라는 화면에서 b라는 화면으로 특정 버튼을 눌렀을 때 이동하는 것

 

mainactivity는 화면을 뜻하고 activity_main은 그 화면을 꾸밀 수 있게 도와주는 역할을 함

 

sub activity 만드는 법

1. 좌측에 app에서 com.example.intent 우클릭

2. new에 activity에서 empty activity 클릭

3. activity name정하고 finish 클릭

 

 

activity_main.xml

----------------------------------

<LinearLayout

 

>

 

<EditText

     android:id"@+id/et_test"

     android:layout_width="200dp"

     android:layout_height="wrap_content"/>

 

<Button

     android:id="@+id/btn_move"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     andorid:text="이동"/>

 

</LinearLayout>

----------------------------------

 

 

activity_sub.xml

----------------------------------

<LinearLayout

 

>

 

<TextView

     android:id="@+id/tv_sub"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     andorid:textSize="30sp"

     andorid:text="서브 액티비티 도착"/>

 

</LinearLayout>

----------------------------------

 

 

SubActivity.java

----------------------------------

package com.example.intent;

 

import ...

 

public class SubActivity extends AppCompatActivity {

 

      private TextView tv_sub;

 

      @Override

      protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_sub);

 

            tv_sub = findViewById(R.id.tv_sub);

 

            Intent intent = getIntent( );

            String str = intent.getStringExtra(  name: "str");

 

            tv_sub.setText(str);

      }

}

----------------------------------

 

 

MainActivity.java

----------------------------------

package com.example.intent;

 

import ...

 

public class MainActivity extends AppCompatActivity {

 

      private Button btn_move;

      private EditText et_test;

      private String str;

 

      @Override

      protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

 

            et_test = findViewById(R.id.et_test);

 

 

            btn_move = findViewById(R.id.btn_move);

            btn_move.setOnClickListener(new View.OnClickListener( ) {

                 @Override

                 public void onClick(View view) {

                      str = et_test.getText( ).toString( );

                      Intent intent = new Intent(  packageContext: MainActivity.this , SubActivity.class);

                      intent.putExtra(  name: "str",str);

                      startActivity(intent); // 액티비티 이동

                 }

            }};

      }

}

----------------------------------

'안드로이드 앱 만들기' 카테고리의 다른 글

패키지구조 & 역할  (0) 2020.08.01
Image View & Toast  (0) 2020.08.01
EditText & Button  (0) 2020.07.28
Text View 만들기  (0) 2020.07.25
안드로이드 개발자 모드(USB 디버깅) 설정방법  (0) 2020.07.25
Posted by khon98
,