如何在线性布局中添加子布局,其间距相等

时间:2017-05-16 19:46:46

标签: android android-linearlayout

我有一个水平方向的线性布局。 我想要做的是,我想在运行时添加图像,这些图像应该在线性布局中等间距。为了更好地理解,这是所需的输出。

enter image description here

但我一个接一个地把两张图片放在右边。

以下是代码段。

  

1)父布局(test.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/test"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
></LinearLayout>`
  

2)子布局(test_image.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testTab"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
>
<ImageView
    android:id="@+id/testImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
 </LinearLayout>
  

这是我在父布局中添加子项的活动

public class Test extends AppCompatActivity {

private  LayoutInflater inflater;

@Override
protected void onCreate(Bundle savedInstanceStste)
{
    super.onCreate(savedInstanceStste);
    setContentView(R.layout.test);

    inflater = (LayoutInflater) Test.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    LinearLayout layout = (LinearLayout)findViewById(R.id.test);

    LinearLayout tab = provideTab(R.drawable.rottentomatoes);
    LinearLayout tab1 = provideTab(R.drawable.rottentomatoes);

    layout.addView(tab);
    layout.addView(tab1);

}

public LinearLayout provideTab(int id)
{

    LinearLayout cardView = (LinearLayout)inflater.inflate(R.layout.test_image,null);

    ImageView imageView = (ImageView)cardView.findViewById(R.id.testImage);
    imageView.setImageResource(id);

    return cardView;
}}

我在这里缺少什么 (当我在父布局中添加子布局使用包含标签时,图像的间距相等) 提前致谢

2 个答案:

答案 0 :(得分:1)

provideTab方法的第一行更改为

LinearLayout cardView = (LinearLayout)inflater.inflate(R.layout.test_image, layout, false);

其中layout是父LinearLayout(从(LinearLayout)findViewById(R.id.test)返回)。

第二个参数将为返回的层次结构的根提供一组LayoutParams值。阅读更多here

答案 1 :(得分:1)

您的孩子的意见需要知道他们所在的位置,以确保权重正确。这就是为什么包括作品但你的代码没有。请尝试以下代码:

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;

import junit.framework.Test;

public class MainActivity extends AppCompatActivity {
    private LayoutInflater inflater;
    LinearLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);

        inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layout = (LinearLayout) findViewById(R.id.test);

        LinearLayout tab = provideTab(R.mipmap.ic_launcher_round);
        LinearLayout tab1 = provideTab(R.mipmap.ic_launcher_round);

        layout.addView(tab);
        layout.addView(tab1);
    }

    public LinearLayout provideTab(int id) {

        // Let the inflater know what the parent ViewGroup is (layout) but don't attach (false)
        LinearLayout cardView = (LinearLayout) inflater.inflate(R.layout.test_image, layout, false);

        ImageView imageView = (ImageView) cardView.findViewById(R.id.testImage);
        imageView.setImageResource(id);

        return cardView;
    }
}