Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中动态生成相对布局_Android_Android Relativelayout - Fatal编程技术网

在Android中动态生成相对布局

在Android中动态生成相对布局,android,android-relativelayout,Android,Android Relativelayout,我想知道如何为我的应用程序动态生成相对布局。我想为从服务器获取的每个项目生成一个新的相对布局 我要生成的XML视图如下所示: <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_hor

我想知道如何为我的应用程序动态生成相对布局。我想为从服务器获取的每个项目生成一个新的相对布局

我要生成的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\u 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);
RelativeLayout问题\u布局=新的RelativeLayout(此);
RelativeLayout.LayoutParams params=新的RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_内容,
RelativeLayout.LayoutParams.WRAP_内容);
for(int i=0;isetContentView(R.layout.activity_main);应该在LinearLayout base=(LinearLayout)findViewById(R.id.question_content)之前;否则base将返回null值

还有一些问题,请在每次添加时创建params对象,在为循环外部创建问题布局视图。它应该在为循环和基础内部。addView(问题布局);也应该在为循环内部。请检查更正的答案

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);
}
setContentView(R.layout.activity\u main);
LinearLayout base=(LinearLayout)findViewById(R.id.question_content);

对于(int i=0;我在您的代码中“不起作用”的是什么?当前发生了什么?我强烈建议您根据需要添加它们。您所显示的方向可能很难管理。我猜我传递给Question_Layout的每个子元素(即TextView)的参数显示错误。我使用try catch blo时也是如此确认它说ArrayIndexOutOfBound错误
ArrayIndexOutOfBound
非常具体。你能发布日志并指出是哪行代码导致了错误吗?谢谢你的建议,但你能不能再简短一点如果关于inflatorManush,你可以创建一个包含相对布局和4个文本视图的xml。添加所有文本颜色,xml中的重力。现在按照上面的建议进行膨胀。检查我编辑的回复。嗨,Manush,这个解决方案是否帮助了你或你仍然面临任何问题。如果它解决了你的问题,那么请接受这个解决方案。我想从json中添加textview的值并给他们新id。如果我使用他们的id调用他们,那么在分配了新id之后,我该怎么做我应该调用布局的文本视图。什么是充气机和项目布局中的mcontext?
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);
}