2010-11-22 1 views
2

안드로이드 에뮬레이터에서 WVGA800 스킨을 사용하고 있으므로 밀도 (hw.lcd.density)는 240입니다. 활동보기의 맨 아래에 4 개의 이미지 버튼 (인치당 72 픽셀)을 넣어야합니다. 해상도가 480X800이므로 이미지 너비는 120 픽셀이어야합니다. 문제는 응용 프로그램이 시작되고 3 개의 버튼이 모든 너비를 차지하고 4 번째 버튼을 놓을 장소가없는 경우입니다. 그런 다음 Fireworks에서 인치당 240 픽셀 해상도와 120 픽셀 폭의 버튼 이미지를 만들었지 만 문제가 남아 있습니다. 누군가가 올바른 드로어 블 (크기 및 dpi)을 만들어 안드로이드에서 픽셀로 픽셀로 표시 할 수있는 방법을 설명 할 수 있습니까?안드로이드, 이미지 및 dpi

답변

0

너비는 실제로 320 픽셀이므로 전체 화면의 4 개 버튼은 각각 80dpi로 설정됩니다. 안드로이드는 밀도 독립적 픽셀을 480 픽셀의 적절한 화면 크기로 조정합니다.

+0

800X480 장치를 레이아웃과 함께 사용하는 경우, 폭이 각각 120 픽셀 인 4 개의 버튼 (리소스가 ImageButton 인 72 픽셀/cm, Fireworks CS5의 표준 해상도와 저는 Photoshop을 믿습니다)이 사용 된 경우 썼습니다. px가 dp로 바뀌면 제 4 버튼에 공간이없고 모든 버튼이 늘어나고 흐리게 보입니다. 1px는 1dp가 아닙니다! 따라서 dp를 사용하려면 px를 1.5로 나눠야합니다. 예를 들어 내 이미지가 60px 인 경우 레이아웃에서 40dp를 사용해야합니다. 이 방법은 저해상도 장치에서도 작동합니다 (예 : HTC 산불). ImageButton의 크기가 올바르게 조정되었습니다. – StevenR

1

이미지 DPI는 완전히 무시하십시오. 부적절한 것은 픽셀 크기뿐입니다. 실제로 제안 할 내용은 버튼 배경으로 사용할 NinePatch 이미지를 만드는 것입니다. StateListDrawable에 넣으려면 실제로 몇 가지가 필요합니다. 다른 초점 상태가 정의되는 방식입니다 (예 : 누른 상태, 집중된 상태). fill_parent

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 1" 
     android:layout_weight="1" 
    /> 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 2" 
     android:layout_weight="1" 
    /> 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 3" 
     android:layout_weight="1" 
    /> 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/my_nine_patch" 
     android:text="button 4" 
     android:layout_weight="1" 
    /> 
</LinearLayout> 

설정 모든 버튼을 그들에게 모두 동등한 비중을 : 당신이 당신의 나인 패치 NinePatch가 있으면, 그냥 그렇게 같이있는 LinearLayout을 만들 수 있습니다. 부모에게 균등하게 맞추기 위해 늘릴 것이며, 일정한 픽셀이나 딥 크기를 지정하는 것에 대해 전혀 걱정할 필요가 없습니다. 또한 해상도에 상관없이 모든 Android 기기로 균등하게 분할됩니다.

+0

1) WVGA800 해상도는 800X480 (높이 x 너비)입니다. 그리고이 해상도는 또한 HTC Desire 사양 (내 테스트 환경)에서 나타납니다. 480으로 나누는 480은 120이므로 각 버튼의 너비는 120 픽셀이어야합니다. 480이 320 일 수있는 방법 (그렇다면 정말로 제 경우에는 네 번째 버튼을위한 공간이 없습니다)? 2) 이미지에 그라디언트가 포함되어 스트레칭을하지 않으려 고하고 있습니다. 그래서 "스트레칭"의 insted 나는 적어도 하나의 선호하는 해상도에 대한 픽셀의 완벽한 픽셀을 달성하고자합니다. 누군가이 주제에 대해 더 많은 정보를 제공 할 수 있습니까? – StevenR

+0

320 픽셀 코멘트는 내 것이 아니 었습니다. 이론적으로 버튼의 크기는 120 픽셀이어야하지만, 그 사이의 패딩도 염두에 두어야합니다. 또한 사용자가 가로 방향으로 회전하면 어떻게됩니까? 9- 패치 이미지로 그라데이션을 처리 할 수 ​​있습니다. 좀 더 까다 롭습니다. 다음은 9 패치에 대한 추가 정보입니다. http://forum.xda-developers.com/showthread.php?t=580351 – kcoppock

4

res/drawable에 이미지를 올리면 Android는 160dpi라고 가정하고 해상도에 따라 이미지의 크기를 조정합니다.

귀하가 선택할 수있는 옵션은 버튼 이미지를 약 240dpi의 밀도를 목표로하는 신호로 res/drawable-hdpi에 입력하거나 res/drawable-nodpi에 입력하여 현재의 화면 밀도에 관계없이 크기가 조정되지 않도록 할 수 있습니다.

여전히 레이아웃에서 @drawable/whatever으로 참조하면 엔진이 자동으로 가장 일치하는 항목을 찾습니다.