2013-06-08 4 views
0

내 액티비티 중 하나에서 런타임에 맞춤 클래스를 통해 추가되는 셀이있는 표 레이아웃이 있습니다. 의 디스플레이로 사용되는 런타임에 예기치 않게 변경되는 Android ImageView 크기

public Cell(Context context) { 
    super(context); 

    addView(((LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 
     .inflate(R.layout.gallery_row_1, null)); 
} 

내가 셀을 팽창

, 나는 또한 설정 이미지 :

<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+cell/style_2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginBottom="5dp" > 

     <View 
      android:id="@+cell/divider" 
      android:layout_width="fill_parent" 
      android:layout_height="2dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:background="#FF000000" /> 

     <ImageView 
      android:id="@+cell/image" 
      android:layout_width="fill_parent" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_below="@cell/divider" 
      android:layout_margin="5dp" 
      android:contentDescription="@string/row_thumbnail" 
      android:scaleType="fitCenter"/> 
    </RelativeLayout> 

</TableRow> 

이것은 다음 클래스에 의해 팽창됩니다 다음과 같이 내 세포의 레이아웃입니다 문제는 이미지 뷰의 크기가 그대로 유지되지 않고 오른쪽 가장자리가 보이지 않으며 이미지가 표시되지 않는다는 것입니다 (어딘가에있는 경우 일 수 있습니다). 문제가 어디에서 발생했는지 확신 할 수 없습니다. 거짓말.

c = new Cell(this); 
c.getImageView().setImageBitmap(BitmapFactory.decodeStream(assetManager.open("categories" + File.separator + sec + File.separator + filename))); 
page.addView(c); 

getImageView은 실제 ImageView 요소를 반환하는 내 Cell의 함수입니다.

이미지가 ImageView에 배치된다는 것을 알고 있습니다. 레이아웃 매개 변수가 변경되면 이미지가 제대로 표시되지 않기 때문에 적절하게 크기가 조정되지 않았기 때문입니다.

원하는 출력은 뷰, 상단의 분할보기 및 아래의 ImageView이어야하며 부모를 채우며 100dp의 높이 여야합니다. 이미지는 원래 크기와 상관없이 크기를 조정하고 내부에 표시해야합니다.

또한 ImageView에 이미지를 설정 한 행을 주석 처리하면 Show Layout Bounds으로 볼 때 레이아웃 경계가 정확합니다.

전반적인 질문은 왜 이미지를 적용 할 때 ImageView의 크기가 조정되는지입니다.

모든 도움을 주시면 대단히 감사하겠습니다.

답변

2

왜 레이아웃이 섞여 있는지 보려면 this post on LayoutInflater을 참조하십시오.

LayoutInflater inflater = LayoutInflater.from(context); 
inflater.inflate(R.layout.gallery_row_1, this); 

또는

LayoutInflater inflater = LayoutInflater.from(context); 
View view = inflater.inflate(R.layout.gallery_row_1, this, false); 
addView (view); 

대신

inflater.inflate(R.layout.gallery_row_1, null); 
을 사용 : 그것은 (당신이 addView()를 호출하고 이후) 휴대 클래스는 일부 ViewGroup의 내부 클래스 보인다 때문에, 다음 코드를 사용해보십시오

inflate() 호출은 두 번째 매개 변수 (컨테이너)를 사용하여 XML을 해석하는 데 사용할 LayoutParams 유형을 결정합니다. 널 (null)을 전달하면 모든 레이아웃 속성이 무시됩니다. 대신 실제 컨테이너 (자동으로 컨테이너에 추가)와 함께 호출하거나 컨테이너와 함께 호출해야하며, 뷰를 아직 연결하지 말 것을 알리는 세 번째 매개 변수를 가져온 다음 비정상적인보기로 원하는 것을 수행해야합니다 .

+1

나는 당신을 사랑합니다. 감사! : D 나는 모든 것이 올바르게 자리 잡도록 노력하는 XML 설정으로 2 시간 동안 놀았다. –

관련 문제