我创建了这样的布局:
<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>
但在此自定义视图中,有RelativeLayout
,ImageView
和TextView
。我需要动态创建一些自定义视图,如下所示。
如何以编程方式创建此自定义视图? 例:
Button bt = new Button(MainActivity.this);
如何以编程方式更改TextView
,RelativeLayout
,背景和ImageView
?赞:
CustomView cv = new CustomView(MainActivity.this);
cv.setImage(R.drawable.chips);
cv.setRlBackground(Color.WHITE);
cv.setText("Hello, World!");
答案 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