以编程方式编辑自定义视图

时间:2017-02-01 12:25:34

标签: java android xml android-layout android-custom-view

我创建了这样的布局:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/rlMenu"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:layout_centerVertical="true">

    <RelativeLayout
        android:background="@drawable/dark_rectangle_bord"
        android:id="@+id/rl1dia"
        android:elevation="10dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_width="@dimen/sizeCard"
        android:layout_height="@dimen/sizeCard"
        android:layout_marginBottom="@dimen/padding_bottom_cards"
        android:layout_marginEnd="@dimen/padding_end_cards"
        android:layout_marginRight="@dimen/padding_end_cards"
        android:layout_marginLeft="@dimen/padding_start_cards"
        android:layout_marginStart="@dimen/padding_start_cards"
        android:layout_marginTop="@dimen/padding_top_cards">

        <TextView
            android:text="1º Dia"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv1dia"
            android:textStyle="normal|bold"
            android:textColor="@color/Branco"
            android:layout_alignParentBottom="true"
            android:padding="10dp"
            android:textSize="@dimen/texto_pequeno"
            android:gravity="center"
            android:fontFamily="sans-serif"
            android:layout_centerHorizontal="true"/>

        <ImageView
            app:srcCompat="@drawable/ic_calendario_1"
            android:id="@+id/iv1dia"
            android:layout_width="@dimen/sizeImage"
            android:layout_height="@dimen/sizeImage"
            android:layout_centerHorizontal="true"
            android:layout_alignParentTop="true"
            />

之后,我将它包含在我的MainActivity中。

    <include
    android:id="@+id/my_custom_view"
    layout="@layout/custom_view></include>

但在此自定义视图中,有RelativeLayoutImageViewTextView。我需要动态创建一些自定义视图,如下所示。

如何以编程方式创建此自定义视图? 例:

   Button bt = new Button(MainActivity.this);

如何以编程方式更改TextViewRelativeLayout,背景和ImageView赞:

  CustomView cv = new CustomView(MainActivity.this);
  cv.setImage(R.drawable.chips);
  cv.setRlBackground(Color.WHITE);
  cv.setText("Hello, World!");

2 个答案:

答案 0 :(得分:1)

您可以使用LayoutInflater

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View mView = (View) inflater.inflate(R.layout.custom_view, null);
    View email = (View) mView.findViewById(R.id.email);
    yourParentView.addView(mView);

但请确保将视图添加到yourParentView的父调用removeAllview()方法

答案 1 :(得分:1)

也许您想要创建一个实际的自定义View,使用include不会创建自定义View,但只会在您的布局中注入特定的xml。所以,创建一个类(在这种情况下扩展RelativeLayout但你可以使用适合你的任何东西)

public class CustomView extends RelativeLayout {

    private TextView textView;
    private ImageView imageView;

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

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

    public void setImage(int resId){
        imageView.setImageResource(resId);
    }

    public void setText(String text){
        textView.setText(text);
    }
}

自定义视图(custom_view.xml)布局的xml,您可能希望使用merge而不是include,因为您已经拥有父级布局(RelativeLayout在这种情况下)

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

将自定义视图添加到Activity这样的布局中,请注意您需要使用您正在使用的自定义View课程的全名,在这种情况下{{1 }}

com.example.lelloman.dummy.CustomView

并在<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <com.example.lelloman.dummy.CustomView android:id="@+id/custom_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>

Activity