레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

2019년 12월 11일 수요일

[Android] ScrollView 안에 RecyclerView

ScrollView 안에 RecyclerView가 있을경우 RecyclerView에도 scroll 이 생길 수 있다.

ScrollView 대신 NestedScrollView로 사용하고

RecyclerView에 android:nestedScrollingEnabled="false"를 추가하자.

[Android] Spinner 예제 ( combobox )

Android에서는 Spinner 예제( ComboBox )


Spinner에 데이터 추가하는 방법은 2가지 있다.


1. values 폴더에 arrays.xml 파일을 생성하여 string-array를 추가한다.

arrays.xml
<string-array name="spinner_data">
   <item>사과</item>
   <item>배</item>
   <item>귤</item>
</string-array>

activity.java
protected void onCreate(Bundle savedInstanceState) {
 ...
 ArrayAdapter spinnerAdapter = ArrayAdapter.createFromResource(getContext(),
    R.array.spinner_data, 
 android.R.layout.simple_spinner_item);
 spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

 Spinner mSpinner = findViewById(R.id.spinner_test);
 mSpinner.setAdapter( spinnerAdapter );
}


2. List를 만들어 추가한다.

activity.java
protected void onCreate(Bundle savedInstanceState) {
 ...
 List<String> spinnerDataList = new ArrayList<>();
 spinnerDataList.add("사과");
 spinnerDataList.add("배");
 spinnerDataList.add("귤");

 ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getContext(),
    android.R.layout.simple_spinner_dropdown_item,
    spinnerDataList);
 spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

 Spinner mSpinner = findViewById(R.id.spinner_test);
 mSpinner.setAdapter( spinnerAdapter );
}



Spinner 리스너 추가하는 방법

mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 @Override
 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  // 선택된 데이터 값
  String selectedItem = parent.getSelectedItem().toString();
  
  // 선택된 데이터 위치( 0 부터 )
  int selectedItemIndex = position;
 }

 @Override
 public void onNothingSelected(AdapterView<?> parent) {
 }
});















2019년 12월 10일 화요일

[Android] Activity 띄우기

Android에서 새로운 Activity를 띄울 때 Intent를 사용한다.

Intent intent = new Intent( getContext(), NewActivity.class );
startActivity( intent );

Intent를 이용하여 Activity에 데이터를 전달 할 수 있다.

Intent intent = new Intent( getContext(), NewActivity.class );
intent.Extra( "testParam", 1 );
startActivity( intent );

NewAcitivity에서는 다음과 같이 데이터를 수신하면 된다.

protected void onCreate(Bundle savedInstanceState) {
 ...
 Intent intent = getIntent();
 int param1 = intent.getIntExtra("testParam");
}



[Android] Asset 파일 복사하기

Android 앱에 파일을 함께 배포할때 assets 폴더를 이용한다.


Asset에 있는 파일은 Apk에 저장하기 때문에 읽기만 가능하다.

그렇기 때문에 read/write를 해야한다면 앱 폴더로 복사해서 사용하여야 한다.


다음은 Asset의 파일을 database 폴더로 복사하는 예제 코드이다.

public void copyDbFromAssets( Context _context ){
 File dbFile = _context.getDatabasePath( DB_NAME );

 if( dbFile == null )
  return;

 AssetManager assetManager = _context.getResources().getAssets();

 if( !dbFile.getParentFile().exists() )
  dbFile.getParentFile().mkdir();

 if( dbFile.exists() )
  dbFile.delete();

 try {
  dbFile.createNewFile();

  InputStream is = assetManager.open(DB_NAME, AssetManager.ACCESS_BUFFER);
  FileOutputStream fo = new FileOutputStream(dbFile);

  byte [] tempdata = new byte[2048];
  int readLen = 0;

  while( readLen != -1 ){
   readLen = is.read(tempdata);
   fo.write(tempdata);
  }

  is.close();
  fo.close();
 } catch (IOException e) {
  e.printStackTrace();
 }
}

[Android] dp to pixel & pixel to dp


dp to pixel

public static int dpToPx(int dp) {
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}



pixel to dp

public static int pxToDp(int px) {
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}



2019년 9월 22일 일요일

[Android] Activity Toolbar 뒤로가기 버튼 만들기

Activity Toolbar에서 뒤로가기 버튼을 만드는 방법이다.



먼저 onCreate() 메소드에 다음을 추가한다.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

그리고 onOptionsItemSelected() 메소드를 상속받아 다음을 구현한다.


@Override
public boolean onOptionsItemSelected(MenuItem item) {
 if (item.getItemId() == android.R.id.home ){
  finish();
  return true;
 }

 return super.onOptionsItemSelected(item);
}



[Android] Activity 화면 고정

안드로이드 앱을 개발하다보면 Activity 화면을 가로 또는 세로로 고정해야 할 때가 있다.
2가지 방법에 대해 알아보자.

1. AndroidManifest.xml 파일 Activity에 screenOrientation 속성을 주는 방법

<activity android:name=".TestActivity1"
 android:screenOrientation="portrait"></activity> // 세로로 고정
   
<activity android:name=".TestActivity2"
 android:screenOrientation="landscape"></activity> // 가로로 고정


2. onCreate() 메소드에서 고정하는 방법


@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
  
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // 세로로 고정
  
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 가로로 고정

 setContentView(R.layout.activity_main); // setRequestedOrientation()을 먼저 호출해야함


2019년 9월 21일 토요일

[Android] sqlite 사용예제

Android에서 SQLiteOpenHelper를 상속는 클래스를 만들어 사용하면 쉽게 사용할 수 있다.


public class SqliteTestClass extends SQLiteOpenHelper {

 public static final String DB_NAME   = "test.db";
 private static final int DB_VERSION   = 1;

 @Override
 public void onCreate(SQLiteDatabase db) {
 db.execSQL( "create table query" );
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 }
 
 public SqliteTestClass(Context context) {
  super(context, DB_NAME, null, DB_VERSION);
 }
}


Insert 예제

synchronized public void insertTest( String insertData ){
 SQLiteDatabase db = getWritableDatabase();

 if( db == null )
  return false;

 db.execSQL("insert into tableName (columnName) values (?);",
   new String[]{ insertData });

 db.close();
}


Select 예제


synchronized public String selectTest( String selectKey ){
 SQLiteDatabase db = getReadableDatabase();
 String result;

 if( db == null )
  return result;

 Cursor cursor = db.rawQuery("select columnName from tableName where selectKeyColumn=?;",
   new String[]{ selectKey });

 if( cursor.moveToNext() ){
  result = cursor.getString( 0 );
 }

 cursor.close();
 db.close();
 return result;
}


2019년 9월 18일 수요일

[Android] 구글 플레이 스토어 앱 등록 - 게시 보류중

구글 플레이 스토어에 앱을 올린지 2일 정도 지났는데 아직 게시 보류중 이라고만 뜬다.


7일까지도 소요될수 있다고 하니 결과를 좀더 기다려보자.

후기
기다리니 드디어 출시 되었습니다.




2019년 9월 16일 월요일

[Android] 이미 버전 코드가 1인 APK 또는 Android App Bundle이 있으므로 다른 버전 코드를 사용해야 합니다.

마켓에 앱등록 후 업데이트 시 발생하는 에러


프로젝트에서 버전을 올려주지 않아서 발생하는 에러이다.


build.gradle 에서 versionCode와 versionName을 수정합니다.

다시 apk를 빌드하여 업데이트를 진행하여주면 됩니다.

2019년 9월 15일 일요일

[Android] 개인정보처리방침 작성 방법



구글 플레이 스토어 앱 배포 과정에서
개인정보처리방침 작성 방법에 대하여 기술한다.

개인정보처리방침을 작성한 URL을 첨부하도록 되어있다.


작성방법은 '개인정보보호 종합포털'(https://www.privacy.go.kr)에서 작성 가능하다.



회사정보 및 추가 작성 후 다음 클릭
시행일은 잘 모를경우 오늘날짜로 설정


개인정보의 제3자 제공 또는 개인정보처리의 위탁에 관한 사항이 없으면 기재 안함 처리

 






자동 수집 장치를 설치 운영 하는 경우에만 선택






다운로드 버튼을 클릭하면 html파일이 다운로드 된다.
다운로드 후 현황에 맞게 수정/가감하여 작성을 마무리한다.


홈