LinearLayout не будет отображать все - PullRequest
0 голосов
/ 05 февраля 2012

Моя проблема может показаться легкой, но я действительно не могу ее решить. В какой-то момент мой код отображает группу изображений (ImageView) в LinearLayout, внутри AlertDialog. Проблема в том, что не все отображается.

Вот мой код:

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

И, как видите, результат не очень хороший. У вас есть идеи, почему?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2012

Вы можете обернуть свой LinearLayout с HorizontalScrollView. Таким образом, вы можете добавить много изображений и прокручивать, чтобы просмотреть их все.

0 голосов
/ 28 февраля 2012
    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);
}

Et ma classe ImageAdapter: Открытый класс ImageAdapter расширяет BaseAdapter реализует ListAdapter { частный контекст c; частные 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 голосов
/ 05 февраля 2012

Проблема в том, что ваш LinearLayout не имеет никаких размеров. Ширина и высота 0. Так что все отлично работает.

Вам не хватает вызова setLayoutParams , вот и все.

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