【问题标题】:Display title on top of image inside horizontal scrollview Programatically以编程方式在水平滚动视图内的图像顶部显示标题
【发布时间】:2013-03-07 16:16:01
【问题描述】:

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

这是水平滚动的示例图像: 这是我的 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>

有什么建议吗?

【问题讨论】:

  • PLz 更准确地描述了您从这些示例中获得的信息以及您的期望。您希望图像位于测试的顶部还是左侧?
  • 好的,谢谢你的屏幕截图,至少我现在明白你的意思了。您使用 RelativeLayout 的第二个解决方案是一个不错的方法:LinearLayout 不允许重叠的子级。请显示您使用 RelativeLayout 得到的结果,以便找出问题所在。
  • 顺便说一下,如果你的RelativeLayout在一个水平滚动视图里面,它的宽度应该是wrap_content。 (所以如果它的内容大于它的父级,滚动将被启用)

标签: android android-layout


【解决方案1】:

你的布局有问题:

您对 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 不是一个好的答案,因为它不允许孩子重叠。

【讨论】:

  • 嗨 回头看看日志,由于某种原因它没有解析颜色。但是,我仍然没有得到我想要的布局。我正在寻找的是标题位于图像顶部的布局,就像在文章中一样。有没有办法以编程方式做到这一点。我可能需要创建自己的视图吗?
  • 哦,你想让文本在上面吗?我没明白。您可以使用 compoud drawables 设置底部可绘制对象(第四个参数)。
  • 我不明白,因为在您的 2 个示例中,您在图像之后添加文本并将其放在下面,在 LineareLayout 中,addView() 调用的顺序设置了子项的顺序,您可能想反转它们...
【解决方案2】:

您可以轻松地将图像添加到 TextView,而无需使用复合可绘制对象将其放入新的父布局中:

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

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

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

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

【讨论】:

  • 您好Guian,感谢您一直以来的建议。不幸的是,这种方法也不起作用。我倾向于扩展相对布局并创建一个结合 2 的视图,看看是否可行。
  • 您好贵安,再次感谢您的尝试。我所做的是我的第二种方法,首先是使用图像和文本作为对象的单独的相对布局。然后我放大了视图,它现在完美运行干杯
  • 很高兴看到这一点,您应该将您的解决方案发布为新答案并将其标记为已接受。 (由未来的观众发现)
猜你喜欢
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多