使Android ListView行适合其包含的图像,而不是更大
我有一个Android列表,我想让我的“ListView”的行维度与其中的实际图像相匹配。当前该行大于其内部的图像,因此会扭曲列表 请参阅下文:使Android ListView行适合其包含的图像,而不是更大,android,android-layout,listview,android-listview,Android,Android Layout,Listview,Android Listview,我有一个Android列表,我想让我的“ListView”的行维度与其中的实际图像相匹配。当前该行大于其内部的图像,因此会扭曲列表 请参阅下文: My activity (ActivitytToyotaOwnersMainListView.java, related code only): public class ActivitytToyotaOwnersMainListView extends Activity { public ListView listView;
My activity (ActivitytToyotaOwnersMainListView.java, related code only):
public class ActivitytToyotaOwnersMainListView extends Activity {
public ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toyota_owners_main);
ListViewItemModelLoader.LoadModel();
listView = (ListView) findViewById(R.id.toyota_owners_main_list_view);
if (listView!=null)
{
String[] ids = new String[ListViewItemModelLoader.Items.size()];
for (int i= 0; i < ids.length; i++){
ids[i] = Integer.toString(i+1);
}
ItemAdapter adapter = new ItemAdapter(this,R.layout.main_activity_view_icons, ids);
listView.setAdapter(adapter);
}
else
{ Log.d("***Class ActivitytToyotaOwnersMainListView, listView: ",
String.valueOf(listView));
}
// OnItemClickListener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
......
My activity(ActivityToYotaOwnersMainListView.java,仅限相关代码):
公共类活动ToYotaOwnersMainListView扩展活动{
公共列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u toyota\u owners\u main);
ListViewItemModelLoader.LoadModel();
listView=(listView)findViewById(R.id.toyota\u车主\u主视图\u列表\u视图);
如果(listView!=null)
{
String[]ids=新字符串[ListViewItemModelLoader.Items.size()];
for(int i=0;i
ActivityToToyotaOwnersMainListView布局xml(activity_toyota_owners_main.xml)
My ItemAdapter(用于在列表中显示图像的自定义适配器)
package com.toyota.toyotaownerspoc.main;
导入android.content.Context;
导入android.graphics.drawable.drawable;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.AbsListView.LayoutParams;
导入java.io.InputStream;
丰田丰田汽车有限公司;
公共类ItemAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终字符串[]id;
私有最终内部资源ID;
公共项适配器(上下文上下文、int textViewResourceId、字符串[]对象){
超级(上下文、textViewResourceId、对象);
this.context=上下文;
id=objects;
this.rowResourceId=textViewResourceId;
}
@抑制警告(“最终”)
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行视图=空;
//获取输入流
InputStream ims=null;
试一试{
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
如果(充气机!=null){
rowView=充气器。充气(rowResourceId,父项,false);
如果(行视图!=null){
ImageView ImageView=(ImageView)行视图
.FindView视图(R.id.main\u活动\u图标\u图像\u视图);
如果(imageView!=null){
intid=Integer.parseInt(id[position]);
字符串resourceId=ListViewItemModelLoader.GetbyId(id).resourceFile;
//将图像加载为可绘制
int resource=context.getResources().getIdentifier(
resourceId,“可提取”,
getPackageName());
Drawable Drawable=context.getResources().getDrawable(
资源);
//将图像设置为ImageView
imageView.setImageDrawable(可绘制);
}否则{
Log.d(“***类ItemAdapter,imageView:”,
字符串.valueOf(imageView));
}
}否则{
Log.d(“***类ItemAdapter,行视图:”,
String.valueOf(rowView));
}
}否则{
Log.d(“***类ItemAdapter,充气机:”,
字符串。值(充气器));
}
}捕获(异常exc){
Log.d(“***类ItemAdapter,getView(int位置,视图转换视图,视图组父级):”,
exc.getMessage());
}最后{
返回行视图;
}
}
}
每个ListView行中的图像布局(main\u activity\u view\u icons.xml)
谢谢我注意到行布局的RelativeLayout中有minHeight参数。请尝试删除该参数。 另外,尝试将相对布局的布局宽度/高度以及图像视图设置为“包装内容” 希望这有帮助。你可以用这个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="64dp">
<ImageView
android:id="@+id/main_activity_icons_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ImageView>
</RelativeLayout>
使用
android:scaleType="fitXY"
在ImageView中,删除多余的空间
或
您可以缩放图像以适应屏幕,因为您的图像比屏幕宽度大。我也遇到了类似的问题,最终过于明确地指定了ImageView的高度。基本上,ImageView布局高度应指定与布局高度的行高相同的值属性。在您的情况下,该属性如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:minHeight="64dp">
<ImageView
android:id="@+id/main_activity_icons_image_view"
android:layout_width="match_parent"
android:layout_height="64dp"
android:scaleType="fitCenter">
</ImageView>
</RelativeLayout>
fitCenter的scaleType并不是为我自己做的。My new main\u activity\u view\u icons.xml,宽度和高度设置为“包装内容”:
我更改了布局,但仍然没有更改,图像/图像视图周围似乎有一个隐含的填充,尽管我的代码或布局都没有指定填充。还要注意的是,我的图像实际上要大得多,框架实际上是自动调整图像大小的。好的,这可能是一个很长的过程,但它对我来说有一些帮助试着改变一下关系
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="64dp">
<ImageView
android:id="@+id/main_activity_icons_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ImageView>
</RelativeLayout>
android:scaleType="fitXY"
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:minHeight="64dp">
<ImageView
android:id="@+id/main_activity_icons_image_view"
android:layout_width="match_parent"
android:layout_height="64dp"
android:scaleType="fitCenter">
</ImageView>
</RelativeLayout>