Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:删除动态生成的ImageView和TextView之间的随机空间_Android_Android Layout_Gridview - Fatal编程技术网

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

android:删除动态生成的ImageView和TextView之间的随机空间,android,android-layout,gridview,Android,Android Layout,Gridview,我目前正在开发一个需要动态生成的GridView的应用程序。在通过适配器添加到GridView的布局中,我有一个从ArrayList获取信息的线性布局,然后它应该显示一个ImageView,后跟一个TextView。我已经通过编程实现了这一点,但是它们之间出现了一些随机空间 我尝试过删除填充、删除边距、将图像的adjustViewBounds设置为true,以及删除TextView的内部填充,但这些都不起作用 以下是包含要填充的LinearLayout的.xml文件: <Relat

我目前正在开发一个需要动态生成的
GridView
的应用程序。在通过适配器添加到
GridView
的布局中,我有一个从
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);

                }
for(int i=0;i<3;i++){
int currentPos=订单大小-i;
如果(当前位置>=0){
LinearLayout容器=新的LinearLayout(v.getContext());
LinearLayout.LayoutParams containerParams=新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_父项,ViewGroup.LayoutParams.WRAP_内容);
容器。设置方向(线性布局。水平);
容器。设置重力(重力。右);
container.setLayoutParams(containerParams);
ImageView img=newImageView(v.getContext());
LinearLayout.LayoutParams imgParams=新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_内容,LinearLayout.LayoutParams.MATCH_父项);
imgParams.gravity=gravity.RIGHT;
img.setLayoutParams(imgParams);
img.setPadding(0,0,0,0);
if(订单获取(当前位置已交付){
img.setImageResource(R.drawable.green_圆圈);
}
否则{
img.setImageResource(R.drawable.yellow_圆圈);
}
TextView txt=新的TextView(v.getContext());
txt.setTextColor(Color.WHITE);
setText(order.get(currentPos.orderItem));
setPadding(0,0,0,0);
container.addView(img);
container.addView(txt);
ll.addView(容器);
}
结果如下:

红色矩形表示额外的空间

多谢各位

 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);

使用此选项,您就不会再看到填充了!!

我建议您在xml布局中创建行项目视图(绿色球和饮料名称),检查在一行中是否一切正常

然后,您可以按如下方式更改for循环:

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);
    }
}
for(int i=0;i<3;i++){
int currentPos=订单大小-i;
如果(当前位置>=0){
//从xml文件开始膨胀视图的新实例
视图tableLineView=GetLayoutFlater()。充气(R.layout.table_行,空);
//图像视图
ImageView iv=(ImageView)tableLineView.findViewById(R.id.ball);
if(订单获取(当前位置已交付){
iv.setImageResource(R.drawable.green_circle);
}否则{
iv.setImageResource(R.可绘制的黄色圆圈);
}
//文本视图
TextView tv=(TextView)tableLineView.findViewById(R.id.TextView);
tv.setText(order.get(currentPos.orderItem));
//添加到线性布局
ll.addView(tableLineView);
}
}
我现在无法测试,如果你发现问题,请问我


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

考虑使用ListView或RecyclerView而不是LinearLayout。那么您为什么要以编程方式创建视图?从xml布局开始,您可以首先看到结果我基本上是在一个栏中呈现多个表的情况。每个表都在这些视图的基础上。使用ListView不起作用,因为我已经在适配器中,所以我认为为ListView创建第二个适配器会很麻烦。好的,但是为什么要以编程方式添加此视图?可以从已测试的资源开始展开布局我以编程方式添加它,因为表的数量可以在5到5之间变化50,所以我需要解释一下。我说的是图像-文本对的创建。以编程方式添加是正确的,但是您可以使用LayoutInflater来直接膨胀xml布局文件,而不是使用新的LinearLayout、new ImageView等。如果您需要一个示例,请告诉我这不起作用,它还会使第一个
ImageView
出现在
TextView
具有与父视图相同的高度,不允许显示其余视图。