android:自定义relativeLayout(或......)中的通用imageview(或任何其他视图)

时间:2017-02-17 22:00:50

标签: java android android-custom-view

我知道这看起来有点愚蠢! 如果我错了,请纠正我。

我制作了一个自定义relativeLayout,它具有某种依赖于屏幕大小的动态行为。我需要在这个布局中添加一个imageView,它继承它的尺寸,就像它的父版一样。

我想知道是否有一种方法可以在我的自定义布局类中实现imageview,这样每次我在布局中添加它时,都会出现imageview吗?

1 个答案:

答案 0 :(得分:1)

当然,您可以在自定义View中自动添加所需的任何RelativeLayout。我看到你可以采取的一些不同方法。

1 - 为自定义RelativeLayout的内容创建xml布局,如果您有很多观看次数,也可以使用<merge>作为根标记:

public class CustomRelativeLayout extends RelativeLayout {

    private ImageView imageView;

    public CustomRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        inflate(context, R.layout.custom_relative_layout, this);

        imageView = (ImageView) findViewById(R.id.image_view);
    }
}

custom_relative_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/image_view"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"/>

2 - 以编程方式创建View

public class CustomRelativeLayout extends RelativeLayout {

    private ImageView imageView;

    public CustomRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        imageView = new ImageView(context);
        LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        imageView.setLayoutParams(layoutParams);
        addView(imageView);
    }
}

3 - 创建一个xml,其中包含CustomRelativeLayout及其中的所有子View,而不是将其包含在<include>的其他布局中。在View

中获取子onFinishInflate()的参考
public class CustomRelativeLayout extends RelativeLayout {

    ImageView imageView;

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        imageView = (ImageView) findViewById(R.id.image_view);
    }
}

custom_relative_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<com.example.CustomRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</com.example.CustomRelativeLayout>

并使用

在其他地方使用它
<include layout="@layout/custom_relative_layout"/>