18

아이스크림 샌드위치에서 Holo Dialog 테마 (@android:style/Theme.Holo.Dialog)를 사용하는 활동에 약간 이상한 문제가 있습니다.ICS Holo Dialog 테마의 문제점은 무엇입니까?

그들은 레이아웃을 무시하고 XML 레이아웃의 레이아웃 너비와 높이 대신 전체 화면을 채우는 것처럼 보입니다. 동일한 레이아웃이 Honeycomb에서 예상대로 작동하지만 Ice Cream Sandwich에서는 작동하지 않습니다.

예 :

올바른 방법 (허니 콤) enter image description here

두 장치 enter image description here 응용 프로그램의 동일한 버전을 실행하고 (아이스크림 샌드위치) 잘못된 방법으로, 똑같은 레이아웃을 사용하고 있습니다. 문제의 레이아웃은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" 
    android:layout_width="940dp" 
    android:layout_height="600dp" 
    android:layout_margin="10dp" > 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="940dp" 
     android:layout_height="600dp" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:smoothScrollbar="true" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
    </GridView> 

</LinearLayout> 

어떻게 해결할 수 있습니까? ICS 기반 갤럭시 넥서스에서도 높이와 너비에 대한 match_parent 태그를 완전히 무시한 비슷한 문제가 발생합니다. 대화 테마가 ICS에서 깨졌습니까?

업데이트 : 좀 더 테스트를 완료했습니다, 그리고 그것은 "올바른"모양을 생산합니다 폭 이하의 894dp 것 같아,하지만 난 폭을 설정 한 경우 895dp하거나

더, 그것은 ' 잘못된 모양이 될 것입니다. 에뮬레이터는 같은 방식으로 작동합니다. 이것은 그래서 결국 대화 주제를 떨어 대신 전체 폭 표준 테마 레이아웃을 사용, 나는 이것에 대한 대답 자신을 찾을 수 없습니다

enter image description here

+0

이상하게 보입니다. 어둠 속에서 촬영 한 것입니다.하지만 빌드 타겟을 변경 한 후 앱에서 이상한 그래픽 오류가 발생하는 경우가 있습니다. 이유는 모르겠지만 프로젝트를 청소하면 항상 문제가 해결됩니다. 내가 말했듯이 어둠 속에서 쐈지 만 그렇게 단순 할 수도 있습니다. – adneal

+0

고마워, 그냥 다시 시도했지만 효과가없는 것 같아. 나는 방금 다시 내 질문을 업데이 트했습니다 - 그것은 폭 894과 895 dp 사이에 일어나고있는 것 같습니다. –

+0

두 개의 개별 장치를 사용하여 스크린 샷을 찍었습니까? 귀하의 게시물은이 동작이 HoneyComb에서는 항상 제대로 작동하지만 ICS에서는 제대로 작동하지 않는다고 가정합니다. 그러나 문제는 화면의 크기에 전적으로 의존하고있을 가능성이 있습니까? 그렇지 않다면 정확하게 동일한 화면 크기로 두 개의 AVD (하나는 3.0을 실행하고 다른 하나는 4.0)를 만들고 두 개의 AVD를 테스트하여 문제가 실제로 Android SDK 버전 번호에 종속되어 있는지 확인할 수 있습니다. –

답변

6

ICS가 대화를 방해하는 것이 사실이라고 생각하지 않습니다. 사실 그들은 전체가 page at Android Design입니다. 사실 에 제공된 DialogFragment이 기존의 Dialog보다 선호됩니다.

전체 화면으로 팝업되는 대화 상자에 대한 관찰을 뒷받침하지만 동작은 장치에 따라 다릅니다. 내 Xoom 태블릿에서는 895가 아니라 915dp에서 발생합니다. Galaxy Nexus에서는 444dp로 발생합니다. 그리고 내 갤럭시 탭 10.1에서는 전혀 발생하지 않습니다.

소스를 파고 들면 더 작은 화면의 경우 Holo에서 큰 화면의 경우 Holo.Dialog.FixedSize에서 나온 대화 상자 테마가 있음을 알 수 있습니다. 나는 이것이 디스플레이 크기가 아니라 레이아웃 크기를 기반으로 할 것으로 예상했을 것이다. 그러나 아마도 나는 오판 될 것이다. 나는 점프의 원인을 알아 내려고 노력할 것이다.

+0

고마워요, 우수 할거야! Holo.Dialog.FixedSize 테마에 대해서도 몰랐습니다. –

+0

나는이 동일한 문제를보고 있습니다 : Theme.Holo.Light. Dialog.NoActionBar 테마는 JellyBean에서 올바르게 동작하지만 ICS에서 위의 '초과 크기'문제가 있습니다. –

1

... 매우 이상한 것입니다. ICS는 대화 상자의 사용을 권장하지 않으므로 변경된 이유 일 수 있습니다.

0

안드로이드의 모든 버전은 Dialog 테마 레이아웃 xml의 너비/높이를 무시합니다.

는 호출 한 후,이 문제를 해결하려면 다음

setContentView(R.layout.contacts_preferences); 

이 줄을 추가 : 사용자의 요구에

getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 

또는 WRAP_CONTENT.

+0

아니요, 그렇지 않습니다. 내가 말했듯이, Honeycomb에서는 잘 작동합니다. –

0

LinearLayout을 바꾸어서 RelativeLayout을 시도해보십시오. 그 트릭을 할 것입니다 :)

어떻게 든 LinearLayouts는 대화 상자에 표시되면 항상 화면을 채 웁니다. RelativeLayouts는 그렇지 않습니다.

관련 문제