Android动态生成布局

时间:2015-09-30 08:14:48

标签: android layout dynamic

我在Android屏幕上动态创建一个布局,显示一个项目列表。 我知道我可以使用ListView和自定义适配器来执行此操作,但列表中的项目必须根据其数据以不同方式显示,并且我想知道是否可以按代码生成布局。

我尝试这种方式,但我只能在屏幕上看到最后一项......好像其他项目被最后一项压制。

这是我的屏幕代码:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="50dp">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="50dp">
        <RelativeLayout
            android:id="@+id/allItemsLoadingPanel"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">
            <ProgressBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:indeterminate="true" />
        </RelativeLayout>
        <LinearLayout
            android:id="@+id/allItemsContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingTop="10dip" />
    </LinearLayout>
    <com.refractored.fab.FloatingActionButton
        android:id="@+id/allItemsFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="66dp"
        android:src="@drawable/ic_action_add"
        android:visibility="gone"
        fab:fab_size="normal"
        fab:fab_colorNormal="@color/appColorPrimary"
        fab:fab_colorPressed="@color/appColorPrimaryPressed"
        fab:fab_colorRipple="@color/appColorPrimaryPressed" />
</FrameLayout>

这里是我膨胀并添加到LynearLayout的单个项目的布局,名为&#34; allItemsContainer&#34;:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">
  <TextView
      android:id="@+id/allItemsIteTitle"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="16sp"
      android:gravity="center_vertical"
      android:textStyle="bold"
      android:layout_alignParentTop="true" />
  <TextView
      android:id="@+id/allItemsIteUsername"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="14sp"
      android:layout_below="@+id/allItemsIteUsername"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:paddingRight="10dp" />
  <TextView
      android:id="@+id/allItemsIteText"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="12sp"
      android:layout_below="@+id/allItemsIteTitle"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:paddingRight="10dp" />
  <RatingBar android:id="@+id/allItemsIteRatingbar"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:numStars="5"
      android:stepSize="0.1"
      android:layout_below="@+id/allItemsIteText"
      android:layout_alignParentEnd="true"
      android:layout_alignParentRight="true"
      android:scaleX="0.5"
      android:scaleY="0.5"
      android:layout_marginRight="-50dp"/>
  <RelativeLayout
      android:id="@+id/allItemsComments"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />
</RelativeLayout>

在我的循环结束时,我已经向lynearLayout添加了一些项目,但我只能看到一个... 你能救我吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以从代码生成布局 您可以在布局中定义LinearLayout。使用.addView(view)

将视图添加到linearlayout

前:

TextView textView  = new TextView(this)
linearLayout.addView(textView);

答案 1 :(得分:0)

伙计们我解决了这个问题:我的所有代码都是正确的但在我的情况下,我要添加一个ScrollView作为我的&#34; allItemsContainer&#34;的母版。 LinearLayout中。现在一切正常。 现在这是我的屏幕代码:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="50dp">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="50dp">
        <RelativeLayout
            android:id="@+id/allItemsLoadingPanel"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">
            <ProgressBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:indeterminate="true" />
        </RelativeLayout>
        <ScrollView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent">
          <LinearLayout
              android:id="@+id/allItemsContainer"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
              android:paddingTop="10dip" />
        </ScrollView>
    </LinearLayout>
    <com.refractored.fab.FloatingActionButton
        android:id="@+id/allItemsFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="66dp"
        android:src="@drawable/ic_action_add"
        android:visibility="gone"
        fab:fab_size="normal"
        fab:fab_colorNormal="@color/appColorPrimary"
        fab:fab_colorPressed="@color/appColorPrimaryPressed"
        fab:fab_colorRipple="@color/appColorPrimaryPressed" />
</FrameLayout>