java - 如何以编程方式将自定义 Java View 类加载到relativelayout

标签 java android xml android-relativelayout android-paint

我想在我的 RelativeLayout 中加载一些自定义 View ,但不知道如何操作。我尝试过的代码不起作用,因此有人知道如何正确执行此操作吗?

XML

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

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin">

        <TextView
            android:id="@+id/textView0"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_marginBottom="20dp"
            style="@android:style/TextAppearance.Medium" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_marginBottom="2dp"
            style="@android:style/TextAppearance.Medium"
            android:layout_below="@id/textView0" />
        <View
            android:id="@+id/drawing0"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_below="@id/textView1" />
        <View
            android:id="@+id/drawing1"                
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="2dp"
            android:layout_below="@id/drawing0" />
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Large"
            android:layout_below="@id/drawing1" />
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Large"
            android:layout_marginStart="10dp"
            android:layout_below="@id/drawing1"
            android:layout_toEndOf="@id/textView2" />
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Medium"
            android:layout_below="@id/textView3" />
        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Medium"
            android:layout_marginBottom="30dp"
            android:layout_below="@id/textView4" />
    </RelativeLayout>

</ScrollView>

Shapes.java

public class Shapes extends android.support.v4.app.Fragment {

    public Shapes() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        return inflater.inflate(R.layout.shapes, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        View v = getView();
        assert v != null;

        //blue shape drawing
        View cv0 = (View)v.findViewById(R.id.drawing0);
        v.addView(new BlueShape(getActivity()));

        //green shape drawing
        View cv1 = (View)v.findViewById(R.id.drawing1);
        v.addView(new GreenShape(getActivity()));

        super.onActivityCreated(savedInstanceState);
    }
}

BlueShape.java

public class BlueShape extends View {
    private final Paint mBlue = new Paint();

    ...

}

GreenShape.java

public class GreenShape extends View {
    private final Paint mGreen = new Paint();

    ...

}

最佳答案

引用https://developer.android.com/guide/topics/ui/custom-components.html

特别是

Modifying an Existing View Type

  1. Use the Custom Component

您可以更改RelativeLayout中的xml

<View... 

<your.package.GreenShape...

如果你事先不知道 View 是什么,那么将其更改为

<FrameLayout... instead of <View...

然后以编程方式将子项(GreenShape 或 BlueShape)添加到该框架布局

关于java - 如何以编程方式将自定义 Java View 类加载到relativelayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45677011/

相关文章:

c# - 如何增加uwp中toastNotification的显示时间?

java - 如何用 Java 8 流替换下面的 for 循环代码

java jaxb意外元素解码

android - RecyclerView 中的 PercentFrameLayout (要求方形)未显示

java - 在运行时更改十六进制字符串

android - 从我的应用程序启动外部应用程序

python - 使用 python 将 xml 数据转储到 csv 文件中的单元格中

java - 在 Espresso 测试中等待异步操作

java - 包括 WEKS、MONTHS、YEARS 的枚举

android - 具有 ListView 和 Mysql 后端的 ORM Lite (android)