0

我正在尝试以编程方式将文本视图添加到水平滚动视图内的图像视图。但是,这似乎不起作用。不滚动的相对布局中的示例图像: 屏幕截图 1

这是水平滚动的示例图像: 捕获 2 这是我的 xml 布局:

        <HorizontalScrollView android:id="@+id/home_horizontal_scroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/middle_menu_title" >    

            <LinearLayout android:id="@+id/home_linear_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >
                </LinearLayout> 
        </HorizontalScrollView>

在我的测试代码中:

     LinearLayout layout = (LinearLayout)findViewById(R.id.home_linear_layout);
    for(int i = 0 ; i < 10; i++){
        ImageView myView = new ImageView(this);
        myView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        myView.setAdjustViewBounds(true);
        myView.setScaleType(ScaleType.FIT_XY);
        myView.setPadding(0, 2, 2, 0);
        myView.setImageResource(R.drawable.render);
        layout.addView(myView);


        TextView text = new TextView(this);

        text.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 50));
        text.setBackgroundColor(Color.parseColor("#4000"));
        text.setTextColor(Color.WHITE);
        text.setGravity(Gravity.CENTER);
        text.setText("Header Title");

        layout.addView(text);  

我也尝试在水平滚动视图中使用相对布局,但没有成功。在像下面这样的简单相对布局中,我可以显示标题和图像,但在水平滚动视图中时不能

 <RelativeLayout android:id="@+id/top_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/menu_title"
        android:background="@drawable/background_gradient">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="2dip"

            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:adjustViewBounds="true"
            android:scaleType="fitXY"
            android:src="@drawable/render" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="#4000"
        android:gravity="center"
        android:text="Image Title"
        android:textColor="#FFFFFF" />
    </RelativeLayout>

有什么建议吗?

4

2 回答 2

0

您的布局有问题:

您对 LinearLayout 父视图说根据其子视图获取宽度:

使用 android:layout_width="wrap_content"

然后你说孩子们根据父母采取宽度:

使用LayoutParams.MATCH_PARENT

您必须了解它无法给出可预测的结果,因为它们都相互依赖。

我认为,如果您将孩子的宽度设置为 LayoutParams.WRAP_CONTENT 它将解决问题:

    ImageView myView = new ImageView(this);
    myView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
    myView.setAdjustViewBounds(true);
    myView.setScaleType(ScaleType.FIT_XY);
    myView.setPadding(0, 2, 2, 0);
    myView.setImageResource(R.drawable.render);
    layout.addView(myView);


    TextView text = new TextView(this);

    text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 50));
    text.setBackgroundColor(Color.parseColor("#4000"));
    text.setTextColor(Color.WHITE);
    text.setGravity(Gravity.CENTER);
    text.setText("Header Title");

    layout.addView(text);

编辑:从问题中看到编辑,LinearLayout 不能是好的答案,因为它不允许孩子重叠。

于 2013-03-04T12:29:12.057 回答
0

您可以使用 compoud drawables 轻松地将图像添加到TextView而无需将其放入新的父布局中:

myTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.left, 0, 0, 0);

放置 0 以删除可绘制对象,您可以在任何一侧(左、上、右、下)放置可绘制对象,请参阅此处的文档,它可能会对您有所帮助。可绘制的大小必须符合您的需求,因为它使用(如它所说的)可绘制的内在边界。

如果您的LinearLayout中除了图像和文本之外没有任何其他视图,建议使用复合可绘制对象进行优化。

编辑:看到问题中的编辑:如果您需要重叠图像和文本,复合绘图不能成为答案。

于 2013-03-06T08:27:00.220 回答