relativelayout中的ImageView与其他小部件重叠

时间:2014-11-20 10:31:13

标签: android android-layout android-custom-view android-relativelayout

我正在尝试在Android中构建一个自定义视图,用于显示图像和一些文本字段(不可编辑)。

我开始为我的自定义视图扩展RelativeLayout类。

在我的自定义视图的构造函数中,我创建了一个ImageView和一个TextView,并将它们添加到了布局中。

立即加载TextView,但ImageView加载到另一个线程上,并通过处理程序填充位图。

加载位图后,ImageViewTextView重叠。 TextView应该位于ImageView的“右侧”,但此调整不会自动发生。

我尝试使用customView.invalidate(),但这没有帮助。

当通过XML声明相同的组件时,不存在此问题。

任何帮助解决将不胜感激。感谢

public class MyView extends RelativeLayout {
    private TextView productName;
    private ImageView productImage;

public MyView(Context context) {
    super(context);
    initHandler();
}

public MyView(Context context, AttributeSet attrs, int defStyleAttr,
        int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    initHandler();
}

public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initHandler();
}

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initHandler();
}

private void initHandler() {
    handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

            // implement logic to show content here
            productName.setText(currentProduct.getTitle());
            productImage.setImageBitmap(currentProduct.getImageBitmap());

            MyView.this.invalidate();
        }
    };      

    productImage = new ImageView(getContext());
    RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    layout.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    layout.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
    productImage.setLayoutParams(layout);

    //keep the textview to right of imageview
    productName = new TextView(getContext());
    layout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    layout.addRule(RelativeLayout.RIGHT_OF, productImage.getId());
    layout.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    productName.setLayoutParams(layout);        
    productName.setTextColor(Color.parseColor("#ffffff"));

    this.addView(productImage);
    this.addView(productName);

    //logic to load content on a new thread goes here
}

}

我在其中包含自定义视图的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.mycompany.MyView
    android:background="@android:color/black"           
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>   
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

您需要在xml中为您的View添加ID

<com.mycompany.MyView

android:id="@+id/myView"

android:background="@android:color/black"           
android:layout_width="match_parent"
android:layout_height="wrap_content"/>   

并在你的java中启动它就像

ImageView im = (ImageView)findViewById(R.id.myView);

试试