如何以编程方式管理线性子布局?

时间:2012-12-11 11:14:56

标签: android android-layout dynamic view

关于布局食物的问题。

我想动态添加视图。

逻辑代码:

    linear1 = (LinearLayout) findViewById(R.id.parent);
    linear2 = (LinearLayout) findViewById(R.id.chiled);

    int len = 4;

    for (int i = 1; i <= len; i++) {
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        params1.gravity = Gravity.RIGHT;

        final int id_txt;
        ImageView iv = new ImageView(this);
        iv.setId(i);
        id_txt = iv.getId();
        iv.setBackgroundResource(R.drawable.ic_launcher);
        linear1.addView(iv, params);
        iv = ((ImageView) findViewById(id_txt));

        for (int j = 1; j < 2; j++) {
            final int id_;
            Button btn = new Button(this);
            btn.setId(i);
            id_ = btn.getId();
            btn.setText("button " + id_);
            linear2.addView(btn, params1);
            btn = ((Button) findViewById(id_));

            btn.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Toast.makeText(v.getContext(),
                            "Button clicked index = " + id_,
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
        // btn.setBackgroundColor(Color.rgb(70, 80, 90));

        // linear1.addView(txt, params);

        // params.addRule(RelativeLayout.RIGHT_OF, txt.getId());

        iv.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Toast.makeText(view.getContext(),
                        "text clicked index = " + id_txt,
                        Toast.LENGTH_SHORT).show();
            }
        });
              }
    }

Xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/chiled"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我想在父视图中添加图像,在子视图中添加两个按钮动态。

我鼓励制作此类型的观看表格

Android heterogeneous gridview like pinterest?

应该像

一样

enter image description here

当前输出为

enter image description here

我不知道问题出在哪里。

我现在在编辑器中遇到的一个奇怪的问题如果我看到代码中的布局那么它会显示android:orientation="vertical",如果我看到大纲,为每个布局显示android:orientation="horizontal"。怎么可能?

帮我解决。谢谢

2 个答案:

答案 0 :(得分:1)

修改

首先,首先将按钮添加到xml。与图像视图一起。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/extra_root"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

    <LinearLayout
        android:id="@+id/chiled"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Like" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Dislike" />
    </LinearLayout>

</LinearLayout>

然后,您可以删除任何添加视图的概念,因为它们已经存在。

package com.example.yul;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class extra extends Activity {
  Button like, dislike;
  LinearLayout root, sub;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.extra);

    like = (Button) findViewById(R.id.button1);
    dislike = (Button) findViewById(R.id.button2);

    // add button listeners here.

    ImageView iv = (ImageView) findViewById(R.id.image);

      iv.setBackgroundResource(R.drawable.ic_launcher);

    }
  }
}

这只会显示一个图像,带有按钮。

您需要做的是将此xml和代码应用于gridView或类似代码。因为否则会发生id冲突。

答案 1 :(得分:0)

由于水平LinearLayout chiled是垂直LinearLayout parent的第一个子项,因此它将作为第一项对齐。因此,向其添加视图会将它们置于最顶层。

尝试将chiled布局移至根LinearLayout root