0

내 DialogFragment의 레이아웃 중 하나는 HorizontalScrollView을 사용하여 자식을 가로로 스크롤합니다. LinearLayout. LinearLayout에 항목이 채워지면 DialogFragment의 너비가 확장되지 않도록 너비를 고정시키는 방법이 있습니까? 한때 잘 DialogFramgnet - Items populatedHorizontalScrollView가 확장되지 않도록 할 수 있습니까?

모든 스크롤 : DialogFragment - First Load

그리고 여기 한자 헤더에서 LinearLayout 항목으로 채워집니다 때 발생하는 내용은 다음과 같습니다

다음은 DialogFragment이 처음로드 때의 모습입니다 항목이 채워지지만 DialogFragment이 확장되지 않도록하고 싶습니다. HorizontalScrollView의 뿌리에 고정 너비를 설정하면 확장이 불가능하지만 매우 다양한 크기의 Android 화면을 고려하면서 좋은 방법을 생각할 수는 없습니다. 여기

에서 한자 지역에 대한 몇 가지 코드입니다 :

<HorizontalScrollView 
    android:layout_height="48dp" 
    android:layout_width="match_parent"> 

    <LinearLayout 
     android:id="@+id/grid_kanji" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" /> 

</HorizontalScrollView> 
+1

'android : maxWidth'를 특정 값에 사용하거나 프로그래밍 방식으로 설정 하시겠습니까? 답변으로 게시 하겠지만 지금은 확인할 수 없습니다. –

답변

0

내가 가지고 대화 상자가 처음 열 때 그것이 무엇에 HorizontalScrollView의 폭을 설정하여 원하는 효과 :

// Fix the size of the HorizontalScrollView so it doesn't expand 
HorizontalScrollView hsv = (HorizontalScrollView) getDialog().findViewById(R.id.grid_kanji_root); 

int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, (float) hsv.getHeight(), getResources().getDisplayMetrics()); 
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, (float) hsv.getWidth(), getResources().getDisplayMetrics()); 
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, height); 

hsv.setLayoutParams(lp); 

getWidth()getHeight() 픽셀 단위로 반환 값을 반환합니다. 따라서 TypedValue은대신 COMPLEX_UNIT_PX을 사용합니다..

반환되는 너비가 0이 될 것이므로 onCreateDialog() 또는 onResume()에서이 작업을 수행 할 수 없습니다. 나는 커서 결과를 자식으로로드하는 함수에서이 코드를 실행했다. LinearLayout은 이미 폭을 설정했는지 여부를 추적하는 전역 부울 값과 함께 - FALSE (대화 상자가 처음로드 될 때) 인 경우 너비를 설정하고 부울을 TRUE으로 설정하십시오.

컨트롤에 적용한 LayoutParams부모 요소의 유형과 일치해야한다는 것을 발견했습니다. 내 HorizontalScrollViewLinearLayout 안에 있기 때문에 HorizontalScrollView.LayoutParams 대신 LinearLayout.LayoutParams을 적용해야했습니다. 그렇지 않은 경우 ClassCast 예외이 표시됩니다.

관련 문제