以编程方式在水平scrollview内的图像顶部显示标题

时间:2013-03-04 03:26:16

标签: android android-layout

我正在尝试以编程方式在水平滚动视图内的imageview中添加文本视图。但是,这似乎不起作用。 在不滚动的RelativeLayout中打开示例图像: Screen Capture 1

以下是水平滚动的示例图像: capture 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>

有任何建议吗?

2 个答案:

答案 0 :(得分: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不能是一个好的答案,因为它不允许儿童重叠。

答案 1 :(得分:0)

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

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

将0删除为drawable, 您可以在任何一侧(左侧,顶部,右侧,底部)放置一个抽屉 请参阅文档here,它可能会对您有所帮助。 drawable的大小必须符合您的需求,因为它使用(如它所说)可绘制的内在边界。

如果 LinearLayout 中没有任何其他视图,而不是图片和文字,建议使用复合drawable进行优化。

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