2

关于布局元素的问题。

我想动态添加视图。

逻辑代码:

    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>

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

我启发制作这种类型的视图形式

像pinterest这样的Android异构gridview?

它应该像

在此处输入图像描述

电流输出为

在此处输入图像描述

我不知道问题出在哪里。

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

帮我解决。谢谢

4

2 回答 2

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 冲突。

于 2012-12-11T11:41:00.153 回答
0

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

尝试将chiledLayout 移动到 root LinearLayout root

于 2012-12-11T11:20:27.770 回答