在Android的水平滚动视图中动态插入视图
我正在为Android平板电脑3.0开发一个应用程序,它有一个活动应该可以在水平轴上滚动,就像电子书一样 为此,我在布局的水平滚动视图中使用了RelativeLayout。以下是XML:在Android的水平滚动视图中动态插入视图,android,android-intent,horizontalscrollview,Android,Android Intent,Horizontalscrollview,我正在为Android平板电脑3.0开发一个应用程序,它有一个活动应该可以在水平轴上滚动,就像电子书一样 为此,我在布局的水平滚动视图中使用了RelativeLayout。以下是XML: <?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:orientatio
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="800px"
android:id="@+id/horizontalScroll"
android:background="#C6D7D2" android:layout_height="600px">
<RelativeLayout android:id="@+id/container" android:layout_width="fill_parent" android:layout_height="fill_parent">
</RelativeLayout>
</HorizontalScrollView>
但它不工作,视图V不显示在屏幕上。但如果我这样做了
addContentView(v)
它将视图v添加到屏幕上(证明我的方法有效),但它不可滚动,因为它位于HorizontalScrollView之外。我做错了什么
更新:
我试过了,但也没有成功:
setContentView(R.layout.main);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ViewGroup parent = (ViewGroup) findViewById(R.id.container);
View v = new View(this);
v.setBackgroundColor(Color.BLUE);
parent.addView(v,params);
我没有蓝色背景。将Relativelayout的宽度更改为
包裹内容
尝试使用此方法添加视图
void addView (View child, ViewGroup.LayoutParams params)
编辑:
从HorizontalScrollView中删除android:orientation=“horizontal”
,您可以使用父视图将视图添加到相对视图中,而不是添加到HorizontalScrollView中
尝试使用horizontalscrollview对象,就像使用relativelayout一样horizontalscrollview scrollView=(horizontalscrollview)findViewById(R.id.scrollView1);
Try this code.
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
imageView.setBackgroundColor(Color.blue);
parent.addView(v,params);
LinearLayout topLinearLayout=新的LinearLayout(本);
//topLinearLayout.setLayoutParams(android.widget.LinearLayout.LayoutParams.FILL\u父级,android.widget.LinearLayout.LayoutParams.FILL\u父级);
topLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
对于(int i=0;i<15;i++){
最终图像视图=新图像视图(本);
imageView.setTag(i);
setImageResource(R.drawable.ic_启动器);
topLinearLayout.addView(imageView);
setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
//TODO自动生成的方法存根
Log.e(“Tag”,“”+imageView.getTag());
}
});
}
scrollView.addView(topLinearLayout);
//ImageView img=(ImageView)findViewById(R.id.imageView1);
//final ImageLoader ImageLoader=ImageLoader.getInstance();
//
//
//
//ImageLoaderConfiguration配置=新建ImageLoaderConfiguration.Builder(getApplicationContext())
//.线程池大小(3)
//.threadPriority(Thread.NORM_PRIORITY-2)
//.memoryCacheSize(1500000)//1.5 Mb
//.discCacheSize(50000000)//50 Mb
//.httpReadTimeout(10000)//10秒
//.DenycacheMageMultipleSizesInMemory()
//.enableLogging()//通常不需要
//.build();
////使用配置初始化ImageLoader。
//ImageLoader.getInstance().init(配置);
//
//final DisplayImageOptions=new DisplayImageOptions.Builder()
//.showStubImage(R.drawable.ic_启动器)
//.cacheInMemory()
//.cacheOnDisc()
//.build();
//
//imageLoader.displayImage(“http://3.bp.blogspot.com/_Sd45ASngYHA/TVC78RORKoI/AAAAAAAAARk/y0GcNkTmb40/s1600/android+logo1.jpg“,img,选项);
//
//setOnClickListener(新的OnClickListener()
// {
//
//@覆盖
//公共void onClick(视图v)
// {
////TODO自动生成的方法存根
//Dialog d=新对话框(TestActivity.this);
//d.setContentView(R.layout.dialog);
//
//d.可设置可取消(真);
//
//ImageView d_img=(ImageView)d.findViewById(R.id.dialog_img);
////d.setLayoutParams(L)
//imageLoader.displayImage(“http://3.bp.blogspot.com/_Sd45ASngYHA/TVC78RORKoI/AAAAAAAAARk/y0GcNkTmb40/s1600/android+logo1.jpg“,d_img,选项);
//
//d.show();
// }
// });
您是否尝试将RelativeLayout更改为水平方向的线性布局?为什么不将容器设置为RelativeLayout
。是否确实为该视图设置了正确的布局参数和高度宽度。?需要查看您的createView()
方法。@user7777我创建的视图实际上是一个扩展视图的类。我试着做parent.addView(v,params);其中params是一个LayoutParams,其中包含设置为包裹内容的高度和宽度。所以我只是实例化了一个视图类型的对象,然后当我将它添加到父对象时,我在更新中设置了参数,在视图“v”中没有任何内容,这就是它不会显示的原因。设置一些高度和宽度,而不是WRAP\u CONTENT
。我无法将其添加到horizontalscrollview,因为horizontalscrollview只能有一个子项,即LayoutAllReady尝试过的子项,也不起作用。LayoutParams params=新的LayoutParams(LayoutParams.WRAP\u CONTENT,LayoutParams.WRAP\u CONTENT);移除方向也不起作用。谢谢你的帮助。你也可以查看我对这个问题所做的更新。问题是LayoutParams的高度和宽度必须与wrap\u content或fill\u parent不同。不知道为什么,但这解决了我的问题。谢谢。原因可能是视图是空的。它没有任何内容。。。像文字或图像等。。因此,包装内容使视图的大小为零。
Try this code.
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
imageView.setBackgroundColor(Color.blue);
parent.addView(v,params);
HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.scrollView1);
LinearLayout topLinearLayout = new LinearLayout(this);
// topLinearLayout.setLayoutParams(android.widget.LinearLayout.LayoutParams.FILL_PARENT,android.widget.LinearLayout.LayoutParams.FILL_PARENT);
topLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
for (int i = 0; i < 15; i++){
final ImageView imageView = new ImageView (this);
imageView.setTag(i);
imageView.setImageResource(R.drawable.ic_launcher);
topLinearLayout.addView(imageView);
imageView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
Log.e("Tag",""+imageView.getTag());
}
});
}
scrollView.addView(topLinearLayout);
// ImageView img=(ImageView)findViewById(R.id.imageView1);
// final ImageLoader imageLoader = ImageLoader.getInstance();
//
//
//
// ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
// .threadPoolSize(3)
// .threadPriority(Thread.NORM_PRIORITY - 2)
// .memoryCacheSize(1500000) // 1.5 Mb
// .discCacheSize(50000000) // 50 Mb
// .httpReadTimeout(10000) // 10 s
// .denyCacheImageMultipleSizesInMemory()
// .enableLogging() // Not necessary in common
// .build();
// // Initialize ImageLoader with configuration.
// ImageLoader.getInstance().init(config);
//
// final DisplayImageOptions options = new DisplayImageOptions.Builder()
// .showStubImage(R.drawable.ic_launcher)
// .cacheInMemory()
// .cacheOnDisc()
// .build();
//
// imageLoader.displayImage("http://3.bp.blogspot.com/_Sd45ASngYHA/TVC78RORKoI/AAAAAAAAARk/y0GcNkTmb40/s1600/android+logo1.jpg",img,options);
//
// img.setOnClickListener(new OnClickListener()
// {
//
// @Overridt
// public void onClick(View v)
// {
// // TODO Auto-generated method stub
// Dialog d =new Dialog(TestActivity.this);
// d.setContentView(R.layout.dialog);
//
// d.setCancelable(true);
//
// ImageView d_img=(ImageView)d.findViewById(R.id.dialog_img);
//// d.setLayoutParams(L)
// imageLoader.displayImage("http://3.bp.blogspot.com/_Sd45ASngYHA/TVC78RORKoI/AAAAAAAAARk/y0GcNkTmb40/s1600/android+logo1.jpg",d_img,options);
//
// d.show();
// }
// });