Первый элемент галереи Android не отображается: parent.getWidth возвращает 0 - PullRequest
0 голосов
/ 01 марта 2011

У меня есть Галерея, отображающая TextViews. Когда он отображается, 1-й элемент не отображается. Это потому, что parent.getWidth () возвращает 0 при первом вызове.

Так, как я могу установить ширину элемента, чтобы быть частью ширины его родительской галереи?

Вот код:

public class GalleryActivity extends Activity {
  private Gallery gallery;
  public void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.gallery);
    gallery = (Gallery) findViewById (R.id.gallery);
    gallery.setAdapter (new Adapter ());
  }

  private class Adapter extends BaseAdapter {
    private String[] items = {"A", "B", "C", "D", "E", "F"};
    public int getCount () {
      return items.length;
    }
    public Object getItem (int position) {
      return items[position];
    }
    public long getItemId (int position) {
      return position;
    }
    public View getView (int position, View convertView, ViewGroup parent) {
      TextView view = new TextView (GalleryActivity.this);
      view.setText (getItem (position).toString ());
      view.setBackgroundColor (Color.GRAY);
      view.setGravity (Gravity.CENTER);
      view.setLayoutParams (new Gallery.LayoutParams (parent.getWidth () / 3,
      LayoutParams.FILL_PARENT));
      return view;
    }
  }
}

макет / gallery.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:layout_weight="1"
    android:scrollbars="horizontal" android:spacing="1dp"></Gallery>
  <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_weight="3"></TextView>
</LinearLayout>

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

ОК, не цитируйте меня, но я верю ширина на самом деле не будет установлена, пока не будет нарисовано некоторое содержимое, поэтому getWidth всегда будет возвращать 0 до этого.Если это так, и вы знаете, какую ширину и высоту вы хотите в любом случае, вы можете вручную установить ширину и высоту заранее с помощью setWidth () и setHeight () ...

Если вам нужны только ширина и высотана самом деле экран дисплея, вы можете использовать ...

                Display display = windowManager.getDefaultDisplay();
                if (display != null) {
                    this.setHeight(display.getHeight());
                    this.setWidth(display.getWidth());
                }

И отказ от ответственности: я никогда раньше не работал с Galleries и не удивлюсь, если есть лучший, лучший способ сделать то, чтоты пытаешься ...

0 голосов
/ 15 октября 2011

Я недавно столкнулся с этой же проблемой.Мне удалось решить эту проблему, вызвав notifyDataSetChanged() на адаптере галерей сразу после установки адаптера.Казалось бы, вид обновляется еще до того, как галерея становится видимой, поэтому я не вижу никаких сбоев от внезапного изменения ширины.

Что-то вроде этого в обратном вызове onCreate():

Adapter adapter = new Adapter();
gallery.setAdapter(adapter);
adapter.notifyDataSetChanged()
0 голосов
/ 02 марта 2011

Я обнаружил, что не так: в последней строке parent.getWidth() возвращает 0 при первом вызове (поскольку макет не завершен), поэтому первый элемент не отображается ...

Так что вопросТеперь становится: Как я могу установить ширину элемента галереи в виде доли от ширины его родителя?Сложность в том, что Галерея принимает только Gallery.LayoutParams.

. Теперь я переформулировал исходный вопрос.

...