프로그래밍 초보자는 안드로이드 프로그램 제작에 실패했다.레이아웃 편(단말기별 해상도)
16229 단어 Android
■ 우선
응용 소프트웨어 개발 경험 & 프로그래밍 초보자 없음.나는 이전보다 응용 프로그램을 더 만들고 싶어서 도전했다.
제작 과정에서 겪는 좌절과 해결 방법은 모두 초보자가 직접 작성한 것인데, 앞으로 안드로이드 앱을 개발하는 분들에게 참고가 될 수 있다면 좋겠다.
■ 개발 환경
■ 걸려 넘어지는 일
↓ 장치: Nexus 7로 변경
그림이 엉망진창으로 비쳤다.
○○%까지 해냈으면 좋겠는데...
따라서 자바의 기술에서 장치마다 화면 해상도가 다르게
※ Android Support Library 23.0에서 제공하는'PercentRelative Layout'을 사용하면 이미지의%를 지정할 수 있습니다.
이번에는 학습뿐만 아니라 자바의 기술로 장치의 화면 해상도가 다르도록 시도해 봤다.(다중 장치는 지원되지 않음)
참조: https://qiita.com/komatatsu/items/c9ea73de513dd287aacb
■ 자바에서 하는 일
이미지.2 = Buttton02
이미지.3 = Button03
이미지 4. = Buton04
이미지 5. = Buton05
이미지.6 = Button06
다음 레이아웃용 프로그램
MainActivity.java
/*onWindowFocusChanged()を使います*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.mainLayout);
/*画面(デバイス)の幅,高さを取得*/
float mainHeight = layout.getHeight();
float mainWidth = layout.getWidth();
/*取得したレイアウトの幅"A"とし、配置したい画像の幅"B"とした場合
"B"が端末内で想定した大きさになる拡縮比が"A/4"*/
float mainIconScale = layout.getWidth() / 4;
/*各画像をfindViewByIdで取得。"各iconに格納"*/
ImageButton icon1 = (ImageButton) findViewById(R.id.Button01);
ImageButton icon2 = (ImageButton) findViewById(R.id.Button02);
ImageButton icon3 = (ImageButton) findViewById(R.id.Button03);
ImageButton icon4 = (ImageButton) findViewById(R.id.Button04);
ImageButton icon5 = (ImageButton) findViewById(R.id.Button05);
ImageButton icon6 = (ImageButton) findViewById(R.id.Button06);
/*取得した画像の幅を.getWidth()で取得。"iconOriginWidth"に格納*/
/*サイズの違う画像を配置する場合は別途取得してください*/
float iconOriginWidth = icon1.getWidth();
/*拡縮比 / 元画像幅 = 画像の縮小比を定義、取得する*/
float iconScale = mainIconScale / iconOriginWidth;
/*定義した比率から表示するicon幅,余白を取得する*/
int iconWidth = (int) (iconOriginWidth * iconScale);
int iconMargin = (int)(mainWidth - iconWidth * 3) / 4;
/*icon画面出力*/
FrameLayout.LayoutParams params1 =
new FrameLayout.LayoutParams(iconWidth, iconWidth);
params1.leftMargin = (int) (iconMargin * 1.2); //画像.1の左の余白を定義
params1.topMargin = (int) (iconMargin * 2.5); //画像.1の上の余白を定義
icon1.setLayoutParams(params1);
FrameLayout.LayoutParams params2 =
new FrameLayout.LayoutParams(iconWidth, iconWidth);
params2.leftMargin = (int) (iconMargin * 2.0 + iconWidth); //画像.2の左の余白を定義
params2.topMargin = (int) (iconMargin * 2.5); //画像.2の上の余白を定義
icon2.setLayoutParams(params2);
FrameLayout.LayoutParams params3 =
new FrameLayout.LayoutParams(iconWidth, iconWidth);
params3.leftMargin = (int) (iconMargin * 2.8 + iconWidth * 2);
params3.topMargin = (int) (iconMargin * 2.5);
icon3.setLayoutParams(params3);
FrameLayout.LayoutParams params4 =
new FrameLayout.LayoutParams(iconWidth, iconWidth);
params4.leftMargin = (int) (iconMargin * 1.2);
params4.topMargin = (int) (iconMargin * 3.1 + iconWidth);
icon4.setLayoutParams(params4);
FrameLayout.LayoutParams params5 =
new FrameLayout.LayoutParams(iconWidth, iconWidth);
params5.leftMargin = iconMargin * 2 + iconWidth;
params5.topMargin = (int) (iconMargin * 3.1 + iconWidth);
icon5.setLayoutParams(params5);
FrameLayout.LayoutParams params6 =
new FrameLayout.LayoutParams(iconWidth, iconWidth);
params6.leftMargin =(int) (iconMargin * 2.8 + iconWidth * 2);
params6.topMargin = (int) (iconMargin * 3.1 + iconWidth);
icon6.setLayoutParams(params6);
}
■ 결과
예: 왼쪽 장치: Nexus 7 오른쪽 장치: Nexus 10
↑ 이해하기 어렵지만 화면 해상도가 다르다
■소감
xml의 레이아웃 기능에 의존하지 않아도 자바의 맞춤법으로 판단할 수 있습니다.
지금부터 안드로이드 프로그래밍을 시작하는 사람에게는 일종의 학습이기 때문에 자바로 레이아웃 디자인을 쓰는 것을 추천합니다.
※ 초보자의 필법이기 때문에 효율적이고 좋은 방법이 많다.느린 코드지만 용서해 주세요
Reference
이 문제에 관하여(프로그래밍 초보자는 안드로이드 프로그램 제작에 실패했다.레이아웃 편(단말기별 해상도)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h-watanabe2/items/bcf3c62694b3d6e047e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)