2012-02-05 6 views
0

내 문제가 쉽게 보일지 모르지만 실제로 해결할 수 없습니다. 어떤 시점에서 내 코드는 AlertDialog 안에 LinearLayout에 많은 이미지 (ImageView)를 표시합니다. 문제는 모든 것이 표시되지 않는다는 것입니다.LinearLayout가 모든 것을 표시하지 않습니다

public LinearLayout createLayout(String text) { 
    LinearLayout ll = new LinearLayout(this.c); 

    int res; 
    for(int i=0; i<text.length(); ++i) { 
     res = this.c.getResources().getIdentifier("pigpen_" + Character.toLowerCase(text.charAt(i)), "drawable", this.c.getPackageName()); 
     ImageView iv = new ImageView(this.c); 
     iv.setPadding(5, 0, 0, 5); 
     iv.setImageResource(res); 
     ll.addView(iv); 
    } 
    return ll; 
} 

그리고 DialogAlert에 대한 코드 :

여기 내 코드의

protected ResultDialog(final Context context, CharSequence title, LinearLayout ll) { 
    super(context); 

    ll.setPadding(10, 5, 10, 5); 

    this.setView(ll); 
    this.setTitle(title); 
} 

image

그리고 당신이 볼 수 있듯이, 결과는 좋지 않다. 왜 그런지 알고 있니?

답변

0
LinearLayout ll = new LinearLayout(this.c); 
    ArrayList<Integer> alImages = new ArrayList<Integer>(); 
    ll.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

    for(int i=0; i<text.length(); ++i) { 
     cur = text.charAt(i); 
     pos = this.getCharAlphabetPosition(cur); 
     if(pos > 0 && pos < alphabetId.length) { 
      res = alphabetId[pos]; 
      alImages.add(res); 
     } 
    } 
    gv.setAdapter(new ImageAdapter(this.c, alImages)); 
    gv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

    gv.setNumColumns(GridView.AUTO_FIT); 
    gv.setColumnWidth(25); 

    ll.addView(gv); 
} 

잇 엄마 클라쎄 ImageAdapter : 공용 클래스 ImageAdapter가 BaseAdapter가 ListAdapter { 개인 상황에 맞는 C를 구현 확장; private ArrayList alImages;

public ImageAdapter(Context c, ArrayList<Integer> alImages) { 
    this.c = c; 
    this.alImages = alImages; 
} 

public int getCount() { 
    return this.alImages.size(); 
} 

public Integer getItem(int position) { 
    return this.alImages.get(position); 
} 

public long getItemId(int position) { 
    return 0; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     imageView = new ImageView(this.c); 
     imageView.setLayoutParams(new GridView.LayoutParams(25, 25)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(5, 0, 0, 5); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageResource(this.getItem(position)); 
    return imageView; 
} 

} 
0

LinearLayout에는 크기가 없습니다. 너비와 높이는 0입니다. 그래서 모든 것이 완벽하게 작동합니다. 당신은 setLayoutParams를 호출 부족

, 그게 전부입니다.

ll.setLayoutParams(new LinearLayout.LayoutParams(FILL_PARENT, FILL_PARENT)); 
+0

안녕하세요. 도움을 주셔서 감사합니다. 나는 당신의 솔루션을 시도했지만 아무런 변화가 없다. 나는 또한 minimumHeight를 넣으려고 시도했다 : 레이아웃은 좋은 높이이지만 이미지는 여전히 모두 표시되지는 않는다. 완벽한 ehavior는 일종의 캐리지가 각각 9 개의 이미지를 반환하는 것입니다. RelativeLayout을 사용하면 더 잘 작동한다고 생각합니까? – Passeur

+0

아마도'GridView'를 검색 할 것입니다. – poitroae

+0

저는 10 개의 이미지마다 새로운 tableRow를 사용하여 TableLayout을 사용했습니다. 나는 그것이 더 큰 스크린에서 거동하는 방식에 대해 우려하고있다. – Passeur

0

LinearLayout을 HorizontalScrollView로 래핑 할 수 있습니다. 그렇게하면 많은 이미지를 추가하고 스크롤하여 이미지를 모두 볼 수 있습니다.

관련 문제