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
具有与父视图相同的高度,不允许显示其余视图。