Android:ListView中的Costum布局
我有一个带有自定义适配器的ListView,它使用自定义布局:Android:ListView中的Costum布局,android,android-layout,listview,android-studio,Android,Android Layout,Listview,Android Studio,我有一个带有自定义适配器的ListView,它使用自定义布局: package giorag.rottentomatoexampleapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import an
package giorag.rottentomatoexampleapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class ShortMovieDataAdapter extends ArrayAdapter<ShortMovie> {
public ShortMovieDataAdapter(Context context, int resource, ShortMovie[] objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
ShortMovie movie = getItem(position);
MovieHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.short_movie_data_view, parent, false);
holder = new MovieHolder();
holder.movieTitle = (TextView)convertView.findViewById(R.id.short_data_title);
holder.year = (TextView)convertView.findViewById(R.id.short_data_year);
holder.type = (TextView)convertView.findViewById(R.id.short_data_type);
holder.imdb = (TextView)convertView.findViewById(R.id.short_data_imdb_id);
holder.poster = (ImageView) convertView.findViewById(R.id.short_data_poster);
convertView.setTag(holder);
}
else {
holder = (MovieHolder)convertView.getTag();
}
holder.movieTitle.setText(movie.getTitle());
holder.year .setText(movie.getYear());
holder.type.setText(movie.getType());
holder.imdb.setText(movie.getImdbID());
Picasso.with(getContext()).load(movie.getPoster()).into(holder.poster);
// Return the completed view to render on screen
return convertView;
}
static class MovieHolder {
public TextView movieTitle;
public TextView year;
public TextView type;
public TextView imdb;
public ImageView poster;
}
}
包giorag.rottentomata示例应用程序;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.squareup.picasso.picasso;
公共类ShortMovieDataAdapter扩展了ArrayAdapter{
公共ShortMovieDataAdapter(上下文上下文、int资源、ShortMovie[]对象){
超级(上下文、资源、对象);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//获取此职位的数据项
短片电影=获取项目(位置);
电影持有人;
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.short\u movie\u data\u view,parent,false);
持有人=新电影持有人();
holder.movieTitle=(TextView)convertView.findViewById(R.id.short\u data\u title);
holder.year=(TextView)convertView.findViewById(R.id.short\u data\u year);
holder.type=(TextView)convertView.findViewById(R.id.short\u数据类型);
holder.imdb=(TextView)convertView.findViewById(R.id.short\u data\u imdb\u id);
holder.poster=(ImageView)convertView.findViewById(R.id.short\u data\u poster);
convertView.setTag(支架);
}
否则{
holder=(MovieHolder)convertView.getTag();
}
holder.movieTitle.setText(movie.getTitle());
holder.year.setText(movie.getYear());
holder.type.setText(movie.getType());
holder.imdb.setText(movie.getImdbID());
毕加索.with(getContext()).load(movie.getPoster()).into(holder.poster);
//返回要在屏幕上渲染的已完成视图
返回视图;
}
静态类电影持有者{
公共文本视图电影;
公共文本查看年;
公共文本视图类型;
公共文本视图imdb;
公众影像浏览海报;
}
}
这就是布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:weightSum="4"
android:layout_weight="2">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/movie_title_placeholder"
android:id="@+id/short_data_title"
android:layout_gravity="center_horizontal"
android:layout_weight="1"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/year_label"
android:id="@+id/textView3"
android:layout_weight="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textIsSelectable="false"
android:singleLine="false"
android:textAlignment="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/year_label"
android:id="@+id/short_data_year"
android:layout_weight="1"
android:layout_gravity="center"
android:phoneNumber="false"
android:textAlignment="center"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/type_label"
android:id="@+id/textView4"
android:layout_weight="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textIsSelectable="false"
android:singleLine="false"
android:textAlignment="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/type_label"
android:id="@+id/short_data_type"
android:layout_weight="1"
android:layout_gravity="center"
android:phoneNumber="false"
android:textAlignment="center"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/imdb_id_label"
android:id="@+id/textView2"
android:layout_weight="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textIsSelectable="false"
android:singleLine="false"
android:textAlignment="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/imdb_id_label"
android:id="@+id/short_data_imdb_id"
android:layout_weight="1"
android:layout_gravity="center"
android:phoneNumber="false"
android:textAlignment="center"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/short_data_poster"
android:layout_gravity="center_vertical|right"
android:layout_weight="1"/>
</LinearLayout>
</FrameLayout>
这就是我的问题:
ImageView始终位于其余视图的旁边,而不是附着到容器的右侧
如何使ImageView始终位于右侧
---编辑---
多亏了法勒姆!成功了。但现在我还有几个问题。首先,ImageView没有拉伸到视图的高度,
其次,ListView中的最后一项部分显示:
我无法滚动低于图像中显示的内容…您可能需要使用
RelativeLayout
并为您的ImageView设置layout\u alignParentRight=“true”
或者您可以将内部LinearLayout
和ImageView的android:layout\u width
更改为0dp
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:weightSum="4"
android:layout_weight="2">
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/short_data_poster"
android:layout_gravity="center_vertical|right"
android:layout_weight="1"/>
您可以用RelativeLayout(所有视图的父视图)替换框架布局,然后添加图像视图,并设置布局\u alignParentRight=“true”。
和包含所有其他视图的最顶部线性布局应始终与相对视图的左侧对齐。您可以使用相对布局,或者如果您希望线性布局有效地使用权重。如果您使用android:weight=“2”//或其他工具,则宽度应为零dpandroid:width=“0dp”
(用于水平布局,如果使用垂直布局,则为android:height=“0”)。您的布局应如下所示:
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2">
<TextView
android:layout_width="0dp" //note this
android:layout_height="match_parent"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
您可以使用线性布局来实现这一点,复制粘贴此代码并查看其是否有效
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:weightSum="4"
android:layout_weight="2">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/movie_title_placeholder"
android:id="@+id/short_data_title"
android:layout_gravity="center_horizontal"
android:layout_weight="1"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/year_label"
android:id="@+id/textView3"
android:layout_weight="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textIsSelectable="false"
android:singleLine="false"
android:textAlignment="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/year_label"
android:id="@+id/short_data_year"
android:layout_weight="1"
android:layout_gravity="center"
android:phoneNumber="false"
android:textAlignment="center"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/type_label"
android:id="@+id/textView4"
android:layout_weight="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textIsSelectable="false"
android:singleLine="false"
android:textAlignment="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/type_label"
android:id="@+id/short_data_type"
android:layout_weight="1"
android:layout_gravity="center"
android:phoneNumber="false"
android:textAlignment="center"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:weightSum="2"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/imdb_id_label"
android:id="@+id/textView2"
android:layout_weight="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textIsSelectable="false"
android:singleLine="false"
android:textAlignment="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/imdb_id_label"
android:id="@+id/short_data_imdb_id"
android:layout_weight="1"
android:layout_gravity="center"
android:phoneNumber="false"
android:textAlignment="center"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/short_data_poster"
android:layout_gravity="center_vertical|right"
android:layout_weight="1"/>
</LinearLayout>
</FrameLayout>
非常感谢Farhad!这很有效,但现在我有另一个问题。ImageView并没有延伸到视图的整个高度,而且,我以前也有过这种情况,item视图中的最后一个项目只是部分显示。我现在将发布一个新图像