【问题标题】:Insert a view dynamically in a HorizontalScrollView in Android在 Android 的 Horizo​​ntalScrollView 中动态插入视图
【发布时间】:2011-08-25 06:35:33
【问题描述】:

我正在为 Android 平板电脑 3.0 开发一个应用程序,该应用程序具有一个可以在水平轴上滚动的活动,例如电子书。

为此,我在布局的 Horizo​​ntalScrollView 中使用了 RelativeLayout。这是 XML:

<?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>

这个 xml 文件称为 main.xml。

我在java文件中做的是:

setContentView(R.layout.main);
parent = (ViewGroup) findViewById(R.id.container);
View v = createView(); // Thats working for sure.
parent.addView(v);

但它不起作用,视图 V 没有显示在屏幕上。但是如果我这样做了

addContentView(v)

它将视图 v 添加到屏幕上(证明我的方法有效),但它不可滚动,因为它位于 Horizo​​ntalScrollView 之外。我做错了什么?

更新: 我试过了,但也没有成功:

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 更改为水平方向的LinearLayout?
  • 你为什么不把你的容器设为RelativeLayout
  • 您确定为该视图设置了正确的布局参数和高度宽度吗?需要查看您的createView() 方法。
  • @user7777777777 我创建的视图实际上是一个扩展视图的类。我尝试做 parent.addView(v,params);其中 params 是一个 LayoutParams,其中包含设置为 wrap_content 的高度和宽度。所以我只是实例化类型视图的一个对象,然后当我将它添加到父对象时我设置参数
  • 在您的更新中,您的视图中没有任何内容 'v' 这就是它不会显示的原因。设置一些高度和宽度而不是WRAP_CONTENT

标签: android android-intent horizontalscrollview


【解决方案1】:
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();
//              }
//      });

【讨论】:

    【解决方案2】:

    将Relativelayout的宽度改为wrap_content

    尝试使用此方法添加视图。

    void addView (View child, ViewGroup.LayoutParams params)
    

    编辑:
    HorizontalScrollView 中删除android:orientation="horizontal"

    【讨论】:

    • 已经试过了,也没用。LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    • 删除方向也不起作用。谢谢您的帮助。您还可以查看我对该问题所做的更新。
    • 问题是 LayoutParams 的高度和宽度必须与 wrap_content 或 fill_parent 不同。不知道为什么,但这解决了我的问题。谢谢。
    • 原因可能是视图是空的。它没有任何内容......比如文本或图像等......所以包装内容使视图的大小为零。
    【解决方案3】:

    您将视图添加到相对布局中,而不是使用父级添加到水平滚动视图中

    尝试使用 Horizo​​ntalscrollview 对象,就像使用 relativelayout 一样

    【讨论】:

    • 无法添加到horizo​​ntalscrollview,因为horizo​​ntalscrollview只能有一个child,也就是layout
    【解决方案4】:
    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多