2014-09-17 3 views
0

xml 파일에서 목록 항목 행 높이를 설정하려고합니다. 예를 들어 listView와 해당 listAdapter가 있는데이 어댑터는 xml 파일에서보기를 확장합니다.목록 항목 행 높이 설정 xml에 아무런 영향이 없음

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/indicator" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:src="@drawable/ic_right"/> 

     <TextView 
      android:id="@+id/info" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:padding="20dp" 
      android:textSize="16sp" 
      android:textColor="#f96f00" 
      android:layout_gravity="center" 
      android:lines="1" 
      android:ellipsize="end" 
      /> 

     <TextView 
      android:id="@+id/number" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:textSize="12sp" 
      android:paddingRight="10dp" 
      /> 
    </LinearLayout> 

그러나이 60dp은 아무런 효과가 없습니다. 높이를 얼마나 설정했는지에 상관없이 팽창 된 행보기의 높이는 고정되어 있습니다. 레이아웃 내부의 텍스트 뷰를 조정하면 행 높이가 변경됩니다. 왜 이런 일이 생기면 목록 항목 행의 높이를 고정 된 측정 항목에 어떻게 할당 할 수 있습니까?

+0

또한 목록보기의 코드를 게시하십시오 –

+0

선형 레이아웃 높이 android : layout_height = "match_parent"Plz 시도 –

+0

방금 ​​내 식에 코드를 붙여 넣었고 코드 대신 내 이미지를 설정했습니다. 높이가 60dp이므로 이미지의 크기를 확인하고리스트 어댑터의 코드를 게시하십시오 –

답변

2

루트가 null 인 경우 LayoutInfalter의 infalte 함수에 대한 소스 코드를 살펴본 후 LayoutParams가이 뷰에 대해 생성되지 않고 다른 레이아웃에 연결될 때 기본 layoutParams가 사용됩니다. root가 설정되면, inflater는이 뷰를 위해 LayouParams를 생성하고 설정합니다. 그러나 attachToRoot를 true로 설정할 수 없으므로 View get이 어댑터보기에 곧 추가됩니다.

View v = inflater.inflate(R.layout.filtered_trip_row, parent,false); 

내 질문이 해결되었습니다.

+0

고맙습니다. 내 맞춤'ListView'에 대한이 너무 키가 큰 행 항목이 수정되었습니다. – Azurespot

0

괜찮아. 괜찮아, 당황 할 필요가 없어.

어댑터의 getView에서보기를 리턴하기 전에이 코드를 작성하십시오.

View v = inflater.inflate(R.layout.filtered_trip_row, null); 

는 대신에 이것을 시도하여 행을 팽창하면서 null로 '부모'매개 변수를 확인하시기 바랍니다

// Just reset the layout parms before return 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
          60*3); // put proper dp pixel conversion here, in hdpi it 3px = 1dp 

    view.setLayoutParams(params); 
    return view; 
+0

당신은 대답은 내 질문을 해결했지만, 나는 더 나은 방법 propablly 사용하는 것 같아요 View v = inflater.inflate (R.layout.filtered_trip_row, parent, false); 따라서 xml에 설정된 레이아웃 속성이 적용됩니다. – tinaJohnny

0

, 지금

View v = inflater.inflate(R.layout.filtered_trip_row, parent); 

의 getView 안에 당신의 높이를 설정하려고합니다.

희망이 도움이됩니다.

+0

LayoutInfalter의 infalte 함수에 대한 소스 코드를 보았습니다. 루트가 null이면 LayoutParams가이 뷰에 대해 생성되지 않고 다른 레이아웃에 연결될 때 기본 layoutParams가 사용됩니다. root가 설정되면, inflater는이 뷰를 위해 LayouParams를 생성하고 설정합니다. 그러나, 당신이 대답은 부분적으로 맞아, listAdapter의 get 뷰에서, attachToRoot를 true로 설정할 수 없기 때문에 (루트가 설정된 경우 기본값은 true 임), 예외가 발생합니다. – tinaJohnny

+0

LayoutParam의 인스턴스를 만들고보기로 설정 – Jatin

+0

제안한대로 "null"을 "parent"로 설정하면 내 응용 프로그램이 충돌하고 java.lang.UnsupportedOperationException : addView (View, LayoutParams)가 AdapterView에서 지원되지 않습니다. 오류가 발생했습니다. 전에도 같은 문제가있었습니다. 내 목록 행이 너무 높지만 'xml'에서 조정하면 아무 것도 수행되지 않습니다. – Azurespot

관련 문제