Java Android Gallery第一项未显示:parent.getWidth返回0

Java Android Gallery第一项未显示:parent.getWidth返回0,java,android,width,textview,gallery,Java,Android,Width,Textview,Gallery,我有一个展示文本视图的图库。显示时,不显示第一项。这是因为parent.getWidth()在第一次调用时返回0 那么,如何将项目的宽度设置为其父库宽度的一小部分呢 代码如下: public class GalleryActivity extends Activity { private Gallery gallery; public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstance

我有一个展示文本视图的图库。显示时,不显示第一项。这是因为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;
    }
  }
}
layout/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>

我发现了问题所在:在最后一行,
parent.getWidth()
在第一次调用时返回0(因为布局未完成),因此第一项不显示

现在的问题是:如何将库项目的宽度设置为其父项宽度的一小部分?困难在于Gallery只接受
Gallery.LayoutParams


现在,我已经重新制定了原始问题。

好的,请不要引用我的话,但我相信在绘制某些内容之前,宽度实际上不会设置,因此getWidth在此之前将始终返回0。如果是这样,并且您知道您想要的宽度和高度,您可以使用setWidth()和setHeight()提前手动设置宽度和高度

如果你想要的只是实际显示屏幕的宽度和高度,你可以使用

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

免责声明:我以前从未与画廊合作过,如果有更好的“最佳实践”方法来做你正在尝试的事情,我也不会感到惊讶

我最近遇到了同样的问题。设置适配器后,我立即调用galleries适配器上的
notifyDataSetChanged()
,成功地解决了这个问题。这似乎是更新的看法之前,甚至画廊是可见的,所以我没有看到任何故障,突然改变宽度

onCreate()
回调中类似这样的内容:

Adapter adapter = new Adapter();
gallery.setAdapter(adapter);
adapter.notifyDataSetChanged()

欢迎来到堆栈溢出!请仅对实际答案使用“发布答案”按钮。您应该修改原始问题以添加其他信息。请不要在回答中再问其他问题。创建一个新的。