我想知道如何为我的应用程序动态生成相对布局。我想为从服务器获得的每个项目生成一个新的相对布局。
我想生成的XML视图如下:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="#FFFFFF"
tools:context=".MainActivity"
android:id="@+id/Main_Layout">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/question_content"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/questions">
<!-- Month and Year on the top -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#22C778"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="December 2014"
android:gravity="center"
android:id="@+id/month_name"
android:padding="5dp"
android:textColor="#FFFFFF"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<!-- Date and Month On The Left -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="30 Jan"
android:gravity="center_vertical"
android:background="#F1F1F1"
android:padding="10dp"
android:layout_marginTop="5dp"
android:id="@+id/date_text"
android:layout_below="@+id/month_name"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
/>
<!-- Question Title -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:padding="5dp"
android:text="This Is The Title Of Question Of January"
android:id="@+id/question_title"
android:layout_alignTop="@+id/date_text"
android:layout_toRightOf="@+id/date_text" />
<!-- Question Description -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="This Is The Description Of The Question You See Above And Below Is The Rating Bar"
android:id="@+id/question_desc"
android:layout_below="@+id/question_title"
android:layout_toRightOf="@+id/date_text"
android:layout_toEndOf="@+id/date_text" />
<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/question_rating"
android:numStars="1"
android:stepSize="1"
android:layout_marginLeft="10dp"
android:layout_below="@+id/question_desc"
android:layout_alignLeft="@+id/question_desc"
android:layout_alignStart="@+id/question_desc"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="0 people rated this question"
android:id="@+id/people_rated"
android:padding="15dp"
android:layout_alignBottom="@id/question_rating"
android:layout_below="@+id/question_desc"
android:layout_toRightOf="@id/question_rating" />
</RelativeLayout>
我尝试在java代码中执行此操作:我想在android中创建布局:id =“@ + id / question_content”动态
RelativeLayout Questions_Layout=new RelativeLayout(this);
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
for(int i=0;i<4;i++)
{
//Setting Parameters For TextViews
//Month and Year TextView " DEC 2014
TextView month_name = new TextView(this);
month_name.setText("Jan 2014");
month_name.setId(R.id.ques_title);
month_name.setPadding(5, 5, 5, 5);
month_name.setGravity(Gravity.CENTER);
month_name.setBackgroundColor(Color.parseColor("#22C778"));
month_name.setTextColor(Color.parseColor("#FFFFFF"));
month_name.setTextAppearance(this, android.R.style.TextAppearance_Medium);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
params.addRule(RelativeLayout.ALIGN_PARENT_START, RelativeLayout.TRUE);
month_name.setLayoutParams(params);
//Adding Text View To Relative Layout
Questions_Layout.addView(month_name);
//Setting Parameters For TextViews
//Date and Month TextView " 12 DEC
TextView Day_Month= new TextView(this);
Day_Month.setText("12 Jan");
Day_Month.setId(R.id.day_month);
Day_Month.setPadding(10, 10, 10, 10);
params.setMargins(0, 5, 0, 0);
Day_Month.setGravity(Gravity.CENTER_VERTICAL);
Day_Month.setBackgroundColor(Color.parseColor("#F1F1F1"));
Day_Month.setTextAppearance(this, android.R.style.TextAppearance_Medium);
params.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.BELOW,R.id.month_year);
Day_Month.setLayoutParams(params);
Questions_Layout.addView(Day_Month);
//Setting Parameters For TextViews
//Question Title TextView "This Is Title Of The Question
TextView Ques_Title=new TextView(this);
Ques_Title.setId(R.id.ques_title);
Ques_Title.setText("This Is The Title");
Ques_Title.setPadding(5, 5, 5, 5);
Ques_Title.setBackgroundColor(Color.parseColor("#FFFFFF"));
params.removeRule(RelativeLayout.BELOW);
params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.removeRule(RelativeLayout.ALIGN_PARENT_START);
params.addRule(RelativeLayout.ALIGN_TOP,R.id.day_month);
params.addRule(RelativeLayout.RIGHT_OF,R.id.day_month);
Ques_Title.setLayoutParams(params);
Questions_Layout.addView(Ques_Title);
//Setting Parameters For TextViews
//Question Description TextView "This Is Description Of The Question
TextView Ques_Desc=new TextView(this);
Ques_Desc.setId(R.id.ques_desc);
Ques_Desc.setText("This Is The Description Of Question");
Ques_Desc.setPadding(10, 10, 10, 10);
Ques_Desc.setBackgroundColor(Color.parseColor("#FFFFFF"));
params.removeRule(RelativeLayout.RIGHT_OF);
params.removeRule(RelativeLayout.ALIGN_TOP);
params.addRule(RelativeLayout.BELOW,R.id.ques_title);
params.addRule(RelativeLayout.RIGHT_OF,R.id.day_month);
params.addRule(RelativeLayout.END_OF,R.id.day_month);
Ques_Desc.setLayoutParams(params);
Questions_Layout.addView(Ques_Desc);
RatingBar ratingBar=new RatingBar(this);
ratingBar.setId(R.id.rating_bar);
ratingBar.setNumStars(1);
ratingBar.setStepSize(1);
params.setMargins(10,0,0,0);
params.removeRule(RelativeLayout.ALIGN_LEFT);
params.removeRule(RelativeLayout.BELOW);
params.removeRule(RelativeLayout.START_OF);
params.addRule(RelativeLayout.ALIGN_LEFT,R.id.ques_desc);
params.addRule(RelativeLayout.BELOW,R.id.ques_desc);
params.addRule(RelativeLayout.START_OF,R.id.ques_desc);
ratingBar.setLayoutParams(params);
Questions_Layout.addView(ratingBar);
//Setting Parameters For TextViews
//People Rated TextView "3 people Rated This"
TextView People_Rated=new TextView(this);
People_Rated.setId(R.id.people_rated);
People_Rated.setText("9 People Rated This");
People_Rated.setPadding(15, 15, 15, 15);
People_Rated.setBackgroundColor(Color.parseColor("#FFFFFF"));
params.removeRule(RelativeLayout.RIGHT_OF);
params.removeRule(RelativeLayout.BELOW);
params.addRule(RelativeLayout.BELOW,R.id.ques_desc);
params.addRule(RelativeLayout.ALIGN_TOP,R.id.rating_bar);
params.addRule(RelativeLayout.RIGHT_OF,R.id.rating_bar);
People_Rated.setLayoutParams(params);
Questions_Layout.addView(People_Rated);
}
LinearLayout base=(LinearLayout) findViewById(R.id.question_content);
base.addView(Questions_Layout);
// LinearLayout main=(LinearLayout) findViewById(R.id.question_content);
// main.addView(sv);
setContentView(R.layout.activity_main);
ViewGroup container = (ViewGroup)findViewById(R.id.question_content);
container.addView(Questions_Layout);
但它不起作用。难道我做错了什么。请提出建议
答案 0 :(得分:0)
的setContentView(R.layout.activity_main);应该在LinearLayout base =(LinearLayout)之前的findViewById(R.id.question_content);否则base将返回值为null。
还有一些问题,每次添加时都会创建params对象,你在for循环中创建Questions_Layout视图。它应该在for循环和base.addView(Questions_Layout)中;也应该在for循环中。请检查更正后的答案。
setContentView(R.layout.activity_main);
LinearLayout base=(LinearLayout) findViewById(R.id.question_content);
for(int i=0;i<4;i++)
{
RelativeLayout Questions_Layout=new RelativeLayout(this);
//Setting Parameters For TextViews
//Month and Year TextView " DEC 2014
TextView month_name = new TextView(this);
month_name.setText("Jan 2014");
month_name.setId(R.id.ques_title);
month_name.setPadding(5, 5, 5, 5);
month_name.setGravity(Gravity.CENTER);
month_name.setBackgroundColor(Color.parseColor("#22C778"));
month_name.setTextColor(Color.parseColor("#FFFFFF"));
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
month_name.setTextAppearance(this, android.R.style.TextAppearance_Medium);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
params.addRule(RelativeLayout.ALIGN_PARENT_START, RelativeLayout.TRUE);
//Adding Text View To Relative Layout
Questions_Layout.addView(month_name);
month_name.setLayoutParams(params);
//Setting Parameters For TextViews
//Date and Month TextView " 12 DEC
TextView Day_Month= new TextView(this);
Day_Month.setText("12 Jan");
Day_Month.setId(R.id.day_month);
Day_Month.setPadding(10, 10, 10, 10);
params.setMargins(0, 5, 0, 0);
Day_Month.setGravity(Gravity.CENTER_VERTICAL);
Day_Month.setBackgroundColor(Color.parseColor("#F1F1F1"));
Day_Month.setTextAppearance(this, android.R.style.TextAppearance_Medium);
params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.BELOW,R.id.month_year);
Questions_Layout.addView(Day_Month);
Day_Month.setLayoutParams(params);
//Setting Parameters For TextViews
//Question Title TextView "This Is Title Of The Question
TextView Ques_Title=new TextView(this);
Ques_Title.setId(R.id.ques_title);
Ques_Title.setText("This Is The Title");
Ques_Title.setPadding(5, 5, 5, 5);
Ques_Title.setBackgroundColor(Color.parseColor("#FFFFFF"));
params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.removeRule(RelativeLayout.BELOW);
params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.removeRule(RelativeLayout.ALIGN_PARENT_START);
params.addRule(RelativeLayout.ALIGN_TOP,R.id.day_month);
params.addRule(RelativeLayout.RIGHT_OF,R.id.day_month);
Questions_Layout.addView(Ques_Title);
Ques_Title.setLayoutParams(params);
//Setting Parameters For TextViews
//Question Description TextView "This Is Description Of The Question
TextView Ques_Desc=new TextView(this);
Ques_Desc.setId(R.id.ques_desc);
Ques_Desc.setText("This Is The Description Of Question");
Ques_Desc.setPadding(10, 10, 10, 10);
Ques_Desc.setBackgroundColor(Color.parseColor("#FFFFFF"));
params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.removeRule(RelativeLayout.RIGHT_OF);
params.removeRule(RelativeLayout.ALIGN_TOP);
params.addRule(RelativeLayout.BELOW,R.id.ques_title);
params.addRule(RelativeLayout.RIGHT_OF,R.id.day_month);
params.addRule(RelativeLayout.END_OF,R.id.day_month);
Questions_Layout.addView(Ques_Desc);
Ques_Desc.setLayoutParams(params);
RatingBar ratingBar=new RatingBar(this);
ratingBar.setId(R.id.rating_bar);
ratingBar.setNumStars(1);
ratingBar.setStepSize(1);
params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(10,0,0,0);
params.removeRule(RelativeLayout.ALIGN_LEFT);
params.removeRule(RelativeLayout.BELOW);
params.removeRule(RelativeLayout.START_OF);
params.addRule(RelativeLayout.ALIGN_LEFT,R.id.ques_desc);
params.addRule(RelativeLayout.BELOW,R.id.ques_desc);
params.addRule(RelativeLayout.START_OF,R.id.ques_desc);
Questions_Layout.addView(ratingBar);
ratingBar.setLayoutParams(params);
//Setting Parameters For TextViews
//People Rated TextView "3 people Rated This"
TextView People_Rated=new TextView(this);
People_Rated.setId(R.id.people_rated);
People_Rated.setText("9 People Rated This");
People_Rated.setPadding(15, 15, 15, 15);
People_Rated.setBackgroundColor(Color.parseColor("#FFFFFF"));
params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.removeRule(RelativeLayout.RIGHT_OF);
params.removeRule(RelativeLayout.BELOW);
params.addRule(RelativeLayout.BELOW,R.id.ques_desc);
params.addRule(RelativeLayout.ALIGN_TOP,R.id.rating_bar);
params.addRule(RelativeLayout.RIGHT_OF,R.id.rating_bar);
Questions_Layout.addView(People_Rated);
People_Rated.setLayoutParams(params);
base.addView(Questions_Layout);
}
但更好的方法将使用充气机。您可以创建一个包含自定义行的xml,而不是动态添加所有布局,而不是动态添加所有布局。例如,我们假设您已将布局保存在名为item_layout的xml中。现在用它来动态添加你的布局。这是一种更干净的方法。
setContentView(R.layout.activity_main);
ViewGroup container = (ViewGroup)findViewById(R.id.question_content);
for(int i=0;i<4;i++){
LayoutInflater inflate = LayoutInflater.from(mContext);
ViewGroup base = (ViewGroup)inflate.inflate(R.layout.item_layout, container, false);
TextView month_name = base.findViewById(R.id.month_name);
month_name.setText("Jan 2014");
TextView Day_Month = base.findViewById(R.id.day_month);
Day_Month.setText("12 Jan");
TextView Ques_Title=new TextView(R.id.ques_title);
Ques_Title.setText("This Is The Title");
TextView Ques_Desc=new TextView(R.id.ques_desc);
Ques_Desc.setText("This Is The Description Of Question");
RatingBar ratingBar=new RatingBar(R.id.rating_bar);
ratingBar.setNumStars(1);
TextView People_Rated=new TextView(R.id.day_month);
People_Rated.setText("9 People Rated This");
container.addView(base);
}