我正在尝试在我的Android项目中创建一个库,但似乎无法使其正常工作。
以下是我要做的事情:
基本上,我想要一个只显示一张图片的图库,但仍然有相同的控件(向左和向右滑动)。我从互联网上异步获取图片。
我在哪里?
好吧,现在我只想展示画廊......我会看到“一张照片”之后的步骤。
我的问题是什么?
嗯......我的画廊没有显示在我的布局上。完全没有。
似乎有什么问题?
日志信息告诉我画廊对象的高度和宽度是...... 0.
谈论代码......
Layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/fond">
<ImageView android:background="@drawable/banniere" android:layout_height="wrap_content" android:layout_width="fill_parent"/>
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
活动
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.galleryfullscreen);
Gallery gal = (Gallery) findViewById(R.id.gallery);
ArrayList<Photo> photos = (ArrayList<Photo>) this.getIntent().getExtras().getSerializable("Photos");
int pos = this.getIntent().getExtras().getInt("Index");
Log.i("Season",photos.toString());
gal.setAdapter(new PhotoAdapter(this, photos, false));
gal.setSelection(pos);
Log.d("Bottom", String.valueOf(gal.getBottom()));
Log.d("Right", String.valueOf(gal.getRight()));
Log.d("Width", String.valueOf(gal.getWidth()));
Log.d("Height", String.valueOf(gal.getHeight()));
}
额外设置已正确设置。
适配器
公共类PhotoAdapter扩展了BaseAdapter {
private ArrayList<PhotoView> views;
private ArrayList<Photo> season;
public PhotoAdapter(Context c, ArrayList<Photo> images, boolean mini) {
season = images;
views = new ArrayList<PhotoView>();
for (int i = 0; i < images.size() ; i++)
if (mini)
views.add(new PhotoView(c,images.get(i).getUrlMini(),false));
else{
views.add(new PhotoView(c,images.get(i).getUrlBig(),true));
}
}
@Override
public int getCount() {
return views.size();
}
@Override
public Object getItem(int position) {
return views.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return views.get(position);
}
public ArrayList<Photo> getSeason() {
return season;
}
}
此适配器适用于其他对象(例如gridview)
PhotoView ......
公共类PhotoView扩展了ImageView {
Bitmap image;
public PhotoView(Context context, String url, boolean Gallery) {
super(context);
if (!Gallery){
this.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,GridView.LayoutParams.WRAP_CONTENT));
this.setScaleType(ImageView.ScaleType.FIT_CENTER);
this.setImageDrawable((getResources().getDrawable(R.drawable.blk)));
new DownloadImageTask().execute(url);
}
else{
this.setLayoutParams(new Gallery.LayoutParams(100,100));
this.setScaleType(ImageView.ScaleType.FIT_CENTER);
this.setBackgroundDrawable(((getResources().getDrawable(R.drawable.blk))));
this.setImageDrawable((getResources().getDrawable(R.drawable.blk)));
}
}
public Bitmap getImage(){
return image;
}
public void setImage(Bitmap img){
image = img;
this.setImageBitmap(image);
}
同样,它适用于网格视图。使用下载任务,尚未为Gallery设置。在设置之前我至少试图显示一个资源,所以我确定问题不是来自这里。
Sooo ...为什么我的日志显示画廊宽度和高度为“0”? LayoutParams是为对象设置的(我尝试了XML和代码),以及内部视图。创建项目,并调用“getView”方法。我尝试在这里发布LayoutParams,不会改变任何内容。
我也尝试在图库的布局中添加xmlns:android =“http://schemas.android.com/apk/res/android”部分,并没有改变一件事。
我真的不知道自己错过了什么。我试图在gallery对象上调整很多教程,但仍然......不知道! 如果你知道我应该做什么/尝试,请...
全部谢谢!
干杯
答案 0 :(得分:2)
查看您的XML文件,我可以看到可能存在的问题。您的LinearLayout设置为在水平内容中添加视图(默认情况下),并且您的第一个视图的layout_width设置为fill_parent。
在LinearLayout中将方向设置为垂直。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/fond">