2011-12-01 4 views
5

가 나는 dynamicaly TextView의 조합은 getView() 방법으로리스트 항목을 기입하는 내부 ListViewImageView있다.: 계산 뷰 크기 MyAdapter 내부의 getView ::

getView 내에서 텍스트 및 이미지보기의 크기를 계산해야하므로보기가 너무 큰 경우 visibility=gone을 설정할 수 있습니다. 나는 getView() 내부 해요 때문에, 레이아웃의 값이 아직 만들어지지 않습니다

public View getView(int position, View convertView, ViewGroup parent) { 
    .. 
    View listItem=view.findViewById(R.id.listItem); 
    ImageView imageView=(ImageView)view.findViewById(R.id.myImg); 
    TextView textView=(TextView)view.findViewById(R.id.mytxt); 
    if (imageView.getRight()>listItemText.getRight()) { 
    imageView.setVisibility(View.GONE); 
    } 
    if (textView.getRight()>listItemText.getRight()) { 
    textView.setVisibility(View.GONE);  
    } 
    .. 
} 

를, 그래서 View.getRight() 호출에 대한 잘못된 값을 얻을 : 나는 트링하고있다.

아이디어가 있습니까?

+0

String의 길이에 따라 TextView에 넣을 것을 결정하지 않으시겠습니까? – Thommy

+0

동일한 텍스트 길이가 다른 실제 너비를 가질 수 있기 때문에 – Tomer

+0

listItemtext의 전체 너비와 빼기 폭은 어떨까요? 텍스트 뷰 광고 이미지보기 콘텐츠가 특정 너비에 비해 충분히 작 으면 그것을 표시하거나 숨 깁니다. 궁금한 질문은 텍스트를 생략하고 이미지의 크기를 줄여서 항상 표시되도록합니다. –

답변

0

정말로 그런 일을해야하는 경우 onLayoutChangeListener을 등록하고 왼쪽, 오른쪽, 위쪽 및 아래쪽과 같은 레이아웃 매개 변수의 변경 사항을 수신 할 수 있습니다.

textView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
      @Override 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
       // TODO: Take care of visibility here. You can access the parent View by v.getParent() method. 
      } 
     }); 

은 그러나 당신은 getView 방법 등의 일을 생각하지 않습니다. textView의 다중 선을 만들거나 android:ellipsize="marquee"을 textView의 레이아웃에 설정할 수 있습니다. 선택 윤곽에 대한 추가 정보 : Marquee text in Android