android:删除动态生成的ImageView和TextView之间的随机空间

时间:2017-01-05 17:15:39

标签: android android-layout gridview

我目前正在开发一款需要动态生成GridView的应用。在通过适配器添加到GridView的布局中,我有一个LinearLayout,它从ArrayList获取信息,然后它应显示ImageView后跟TextView。我已经以编程方式完成了这项工作,但两者之间出现了一些随机空间。

我尝试删除填充,删除边距,将图像的adjustViewBounds设置为true,同时删除TextView的内部填充,这些都不起作用。

以下是包含要填充的LinearLayout的.xml文件:

    <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@drawable/rounded_text_black">

    <ImageView
        android:id="@+id/separator"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:scaleType="fitXY"
        android:src="@drawable/horizontal_white_line"
        android:layout_centerVertical="true"/>

    <LinearLayout
        **android:id="@+id/orderLayout"**
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignBottom="@id/separator"
        android:orientation="vertical"
        android:paddingTop="40dp">

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignTop="@id/separator"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:layout_marginTop="10dp">

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:scaleType="fitXY"
            android:src="@mipmap/effects"
            android:layout_gravity="center"/>

        <TextView
            android:id="@+id/moodText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            style="@style/smallText"
            android:padding="0dp"/>

        <TextView
            android:id="@+id/tastesText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            style="@style/smallText"
            android:textAllCaps="false"
            android:padding="0dp"/>

        <TextView
            android:id="@+id/tastesText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            style="@style/smallText"
            android:textAllCaps="false"
            android:padding="0dp"/>

    </LinearLayout>

</RelativeLayout>

以下是生成图像文本对的代码:

    for(int i = 0; i < 3; i++){
                int currentPos = orderSize - i;
                if(currentPos >= 0){
                    LinearLayout container = new LinearLayout(v.getContext());
                    LinearLayout.LayoutParams containerParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                    container.setOrientation(LinearLayout.HORIZONTAL);
                    container.setGravity(Gravity.RIGHT);
                    container.setLayoutParams(containerParams);

                    ImageView img = new ImageView(v.getContext());
                    LinearLayout.LayoutParams imgParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
                    imgParams.gravity=Gravity.RIGHT;
                    img.setLayoutParams(imgParams);
                    img.setPadding(0,0,0,0);


                    if(order.get(currentPos).delivered){
                        img.setImageResource(R.drawable.green_circle);
                    }
                    else{
                        img.setImageResource(R.drawable.yellow_circle);
                    }

                    TextView txt = new TextView(v.getContext());
                    txt.setTextColor(Color.WHITE);
                    txt.setText(order.get(currentPos).orderItem);
                    txt.setPadding(0,0,0,0);

                    container.addView(img);
                    container.addView(txt);
                    ll.addView(container);

                }

结果如下:

Result

红色矩形表示额外的空间。

非常感谢。

2 个答案:

答案 0 :(得分:0)

 TextView txt = new TextView(this);
        LinearLayout.LayoutParams txtParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
        txt.setLayoutParams(txtParams);
        txt.setTextColor(Color.BLACK);
        txt.setText("Hello World");
        txt.setPadding(0,0,0,0);

使用它,你不会再看到填充!!

答案 1 :(得分:0)

我建议您在xml布局中创建订单项视图(绿色球和饮品名称),检查一行是否正常工作。

然后您可以按如下方式更改您的周期:

for(int i = 0; i < 3; i++){
    int currentPos = orderSize - i;
    if(currentPos >= 0){

        // inflate a new instance of view starting from an xml file
        View tableLineView = getLayoutInflater().inflate(R.layout.table_line, null);

        // Image view
        ImageView iv = (ImageView)tableLineView.findViewById(R.id.ball);
        if(order.get(currentPos).delivered){
            iv.setImageResource(R.drawable.green_circle);
        } else{
            iv.setImageResource(R.drawable.yellow_circle);
        }

        // TextView
        TextView tv = (TextView)tableLineView.findViewById(R.id.textview);
        tv.setText(order.get(currentPos).orderItem);

        // add to LinearLayout
        ll.addView(tableLineView);
    }
}

我现在无法测试,如果你发现问题请问我。

Here您可以阅读有关视图膨胀的讨论