#Grip 9기# 일기_1019 - [안드로이드]레이아웃 수정 및 오류 수정

JH·2022년 10월 19일
0

인턴

목록 보기
16/25
post-thumbnail

레이아웃 수정

레이아웃이 화면 크기에 맞지 않아 크기 조정

dp와 px이 화면마다 랜덤으로 설정되어 있어 dp로 통일

대략적인 크기는 맞추었지만 일부 안맞는 현상이 있음

테스트 폰에 최대한 맞춰놓음

여기서 잠깐

그동안 px이 화면 크기 비율에 자동으로 변경되는 것으로 착각하고 있었다.
알고보니 px은 어떤 화면이든 같은 크기로 유지되고 dp가 화면 해상도에 맞게 자동으로 바뀌는 단위였다.

스크린의 실제 단위 px
많이 들어봤을 법한 PX은 화면을 구성하는 최소 단위dl다.
PX 단위는 화면의 전체 화면 크기와 상관없이 지정한 수치만큼 표시되는 절대적 표시 단위이므로 안드로이드에서는 PX보다는 DP 단위를 사용하면 좋다.

다양한 디바이스 크기에 대응하기 위해 필요한 DP
DP는 픽셀 독립 단위이다.
화면의 크기가 달라도 동일한 비율로 보여주기 위해 안드로이드에서 정의한 단위이며 큰 화면,작은 화면에 상관 없이 같은 크기로 나타난다.


오류 수정

기존의 기종이 아닌 새로운 기종으로 했을 경우 사진 촬영이 안되는 현상 발생하였다.

원인을 파악해본 결과 사진을 저장하는 경로와, 사진을 가져오는 경로가 달라서 그런 것으로 판단되었다.
(예전 기종으로 했을 때 됐던 이유는 이전에 다른 테스트를 해보며 이미 경로가 생성되서 그런 것 같음)

메니페스트에는 provider가

  <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.RNU.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

이렇게 선언이 되어있는데

경로를 저장 하는 과정에서

private void takePicture() {
        Intent take_picture_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//모바일 기기내 카메라 intent생성

        if (take_picture_intent.resolveActivity(getPackageManager()) != null) {
            File photo_file = null;
            try {
                photo_file = createImageFile();
            } catch (IOException ex) {
            }
            if (photo_file != null) {
                Uri photo_uri = FileProvider.getUriForFile(this, "com.gitc.RNU.fileprovider", photo_file);//콘텐츠 uri생성(content:// URI 반환)
                //Uri photo_uri = getUriForFile(this, "com.example.RNU.fileprovider", photo_file);
                take_picture_intent.putExtra(MediaStore.EXTRA_OUTPUT, photo_uri);
                take_picture_intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivityResult.launch(take_picture_intent);
            }
        }
    }

다음과 같이 com.gitc.RNU.filepeovider로 설정하였다.

아마 예상으로는 구글플레이 콘솔에 등록하는 과정에서 어플이름이 com.example로 설정하면 안되어 com.gitc로 변경하였는데 그로인해서 충돌이 일어난것 같다.

이미지뷰어에 있는 비트맵을 가져오는데 오류 발생하였다.
Bitmap d_bitmap = s_bitmap.copy(s_bitmap.getConfig(), true);
이 코드에서 오류가 났다
.copy(~~~.getConfig(),true) 요 부분인데
Bitmap d_bitmap = s_bitmap.copy(Bitmap.Config.ARGB_8888,true);
요렇게 변경을 해주니 오류가 해결되었다

0개의 댓글