Android 以相反方向显示ListView项目
我有一个带有自定义适配器的ListView。每行都有一个缩略图、标题和描述选项。 我有一个要求,即列表项即行内容显示在屏幕的相反方向。也就是说,第一行缩略图和其他内容应位于左侧,第二行内容(缩略图、标题、说明)应位于右侧,依此类推 我怎样才能做到这一点 这是我当前的代码:- list_row.xmlAndroid 以相反方向显示ListView项目,android,listview,listitem,Android,Listview,Listitem,我有一个带有自定义适配器的ListView。每行都有一个缩略图、标题和描述选项。 我有一个要求,即列表项即行内容显示在屏幕的相反方向。也就是说,第一行缩略图和其他内容应位于左侧,第二行内容(缩略图、标题、说明)应位于右侧,依此类推 我怎样才能做到这一点 这是我当前的代码:- list_row.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<!-- ListRow Left sied Thumbnail image -->
<LinearLayout android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dip"
android:layout_alignParentLeft="true"
android:layout_marginRight="5dip">
<ImageView
android:id="@+id/list_image"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/ic_launcher"/>
</LinearLayout>
<!-- Title Of Song-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/thumbnail"
android:layout_toRightOf="@+id/thumbnail"
android:layout_marginLeft="10dp"
android:textColor="#040404"
android:typeface="sans"
android:textSize="15dip"
android:textStyle="bold"/>
<!-- Artist Name -->
<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:textColor="#343434"
android:layout_marginLeft="10dp"
android:textSize="10dip"
android:layout_marginTop="1dip"
android:layout_toRightOf="@+id/thumbnail"
/>
<LinearLayout
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_below="@+id/thumbnail"
android:layout_alignParentBottom="true"
android:padding="3dip"
android:layout_alignParentLeft="true">
<TextView
android:id="@+id/txtPubDate"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#97999C" />
</LinearLayout>
</RelativeLayout>
MyListAdapter.java
public class MyListAdapter extends BaseAdapter
{
static class LazyViewHolder
{
TextView title;
TextView description;
ImageView thumb_image;
WebView imageWebView;
TextView pubDate;
String myTitle;
String mydescription;
String bitmapUrl;
}
public MyListAdapter(Context ctx, List<News> getList)
{
mContext = ctx;
data=getList;
inflater =LayoutInflater.from(ctx);
imageLoader=new ImageLoader(ctx);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public boolean isEnabled(int position)
{
// TODO Auto-generated method stub
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View vi=convertView;
LazyViewHolder viewHolder;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row,null);
viewHolder = new LazyViewHolder();
viewHolder.title = (TextView)vi.findViewById(R.id.title); // title
viewHolder.description = (TextView)vi.findViewById(R.id.description); // artist name
viewHolder.pubDate = (TextView)vi.findViewById(R.id.txtPubDate);
News song = data.get(position);
myTitle =song.getTitle();
//Set description
mydescription =Html.fromHtml(song.getBody()).toString();
// Set image
bitmapUrl = song.getBigImage();
//Set date
myDate = song.getPublishedDate();
StringBuilder sb = new StringBuilder(myTitle);
int i = 0;
while ((i = sb.indexOf(" ", i + 40)) != -1) {
sb.replace(i, i + 1, "\n");
}
viewHolder.title.setText(sb.toString());
mydescription = mydescription.substring(0, Math.min(mydescription.length(), 50));
viewHolder.description.setText(mydescription);
viewHolder.thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
imageLoader.DisplayImage(bitmapUrl, viewHolder.thumb_image);
return vi;
}
}
公共类MyListAdapter扩展BaseAdapter
{
静态类LazyViewHolder
{
文本视图标题;
文本视图描述;
ImageView拇指图像;
网络视图图像网络视图;
文本视图发布日期;
字符串myTitle;
字符串mydescription;
字符串位图URL;
}
公共MyListAdapter(上下文ctx,列表getList)
{
mContext=ctx;
数据=获取列表;
充气机=从(ctx)开始的充气机;
imageLoader=新的imageLoader(ctx);
}
@凌驾
public int getCount()
{
//TODO自动生成的方法存根
返回data.size();
}
@凌驾
公共对象getItem(int位置)
{
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置)
{
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共布尔值isEnabled(整型位置)
{
//TODO自动生成的方法存根
返回true;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图vi=转换视图;
懒散的观景台;
if(convertView==null)
vi=充气机充气(右布局列表,空);
viewHolder=新的LazyViewHolder();
viewHolder.title=(TextView)vi.findViewById(R.id.title);//title
viewHolder.description=(TextView)vi.findViewById(R.id.description);//艺术家姓名
viewHolder.pubDate=(TextView)vi.findViewById(R.id.txtPubDate);
新闻歌曲=data.get(位置);
myTitle=song.getTitle();
//集合描述
mydescription=Html.fromHtml(song.getBody()).toString();
//设置图像
bitmapUrl=song.getBigImage();
//设定日期
myDate=song.getPublishedDate();
StringBuilder sb=新StringBuilder(myTitle);
int i=0;
而((i=sb.indexOf(“,i+40))!=-1){
sb.替换(i,i+1,“\n”);
}
viewHolder.title.setText(sb.toString());
mydescription=mydescription.substring(0,Math.min(mydescription.length(),50));
viewHolder.description.setText(mydescription);
viewHolder.thumb_image=(ImageView)vi.findviewbyd(R.id.list_image);//thumb image
imageLoader.DisplayImage(位图URL、viewHolder.thumb\u图像);
返回vi;
}
}
行xml和getview中可以有两个相对布局,您可以这样做
if(position % 2 == 0)
{
// This will be true for 0, 2, 4... rows
// make firstRelativeView Gone
// make secondRelativeView Visible
}
else
{
//This will be true for 1,3,5,,.. rows
// make firstRelativeView Visible
// make secondRelativeView Gone
}
两个relativeLayouts都有缩略图、标题和描述,但方向相反。在此if else中设置图像、标题和描述
此外,您还可以点击以下链接。这是一篇关于如何在listview中膨胀多个视图的教程
第一种方式: 创建两行布局,一行在左侧,另一行在右侧。在适配器中,重写
getViewTypeCount()
并返回2
。覆盖getItemViewType(int-position)
并返回0
用于一种行布局,返回1
用于另一种(如果需要,可以定义常量,但这些是需要返回的值)。最后,在getView()
中,您可以为给定的位置调用getItemViewType()
,并对返回的值进行切换。这将确定要充气的行布局等
第二种方式:
使用
android:visibility=“gone”
制作一行布局,两侧各有一个图像。对所有行使用相同的布局,并使用setVisibility(View.visible)
使两个图像中的一个可见。选择要以任何方式显示的图像。(确保在另一个图像上调用setVisibility(View.GONE)
,以防此行被回收,而另一个图像先前已可见。)您需要定义两个布局,一个用于左侧,一个用于右侧,具有相同的组件ID
而不是在适配器中(假设您使用的是游标适配器)
//试试这个方法,希望能帮你解决问题。。。
**list_row.xml**
**MyListAdapter.java**
公共类MyListAdapter扩展了BaseAdapter
{
静态类LazyViewHolder
{
线性布局;
ImageView-imgLeft;
TextView txtLeftTitle;
TextView txtLeftDescription;
TextView txtLeftPubDate;
线性布局正确;
图像视图不清晰;
TextView txtRightTitle;
TextView txtRightDescription;
TextView txtRightPubDate;
}
私人语境;
私人列表新闻列表;
私有图像加载器;
公共MyListAdapter(上下文、列表新闻列表)
{
上下文=上下文;
新闻列表=新闻列表;
imageLoader=新的imageLoader(上下文);
}
@凌驾
public int getCount()
{
返回newsList.size();
}
@凌驾
公众的
private int getItemViewType(Cursor cursor) {
//some method that returns 1 for left layout, 0 for right layout
}
@Override
public int getViewTypeCount() {
return 2; //return 2 view types
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder viewHolder = (ViewHolder) view.getTag();
//bind your view
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
int type = getItemViewType(cursor);
int layout;
switch (type) {
case 1:
layout = R.layout.row_left; //left layout
break;
case 0:
layout = R.layout.row_right; //right layout
break;
default:
throw new RuntimeException("Unknown view type!");
}
View view = LayoutInflater.from(context).inflate(layout, parent, false);
ViewHolder viewHolder = new ViewHolder();
//initialize ViewHolder using same ids.
view.setTag(viewHolder);
return view;
}
// Try this way,hope this will help you to solve your problem...
**list_row.xml**
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/lnrLeft"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="30dp">
<ImageView
android:id="@+id/imgLeft"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/ic_launcher"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginLeft="10dp">
<TextView
android:id="@+id/txtLeftTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#040404"
android:typeface="sans"
android:textSize="15sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/txtLeftDescription"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#343434"
android:textSize="12sp"
android:layout_marginTop="5dp"/>
<TextView
android:id="@+id/txtLeftPubDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#97999C"
android:layout_marginTop="5dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/lnrRight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginLeft="10dp">
<TextView
android:id="@+id/txtRightTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#040404"
android:typeface="sans"
android:textSize="15sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/txtRightDescription"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#343434"
android:textSize="12sp"
android:layout_marginTop="5dp"/>
<TextView
android:id="@+id/txtRightPubDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#97999C"
android:layout_marginTop="5dp"/>
</LinearLayout>
<ImageView
android:id="@+id/imgRight"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/ic_launcher"/>
</LinearLayout>
</LinearLayout>
**MyListAdapter.java**
public class MyListAdapter extends BaseAdapter
{
static class LazyViewHolder
{
LinearLayout lnrLeft;
ImageView imgLeft;
TextView txtLeftTitle;
TextView txtLeftDescription;
TextView txtLeftPubDate;
LinearLayout lnrRight;
ImageView imgRight;
TextView txtRightTitle;
TextView txtRightDescription;
TextView txtRightPubDate;
}
private Context context;
private List<News> newsList;
private ImageLoader imageLoader;
public MyListAdapter(Context context, List<News> newsList)
{
context = context;
newsList=newsList;
imageLoader=new ImageLoader(context);
}
@Override
public int getCount()
{
return newsList.size();
}
@Override
public Object getItem(int position)
{
return newsList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public boolean isEnabled(int position)
{
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LazyViewHolder viewHolder;
if(convertView==null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_row, null,false);
viewHolder = new LazyViewHolder();
viewHolder.lnrLeft = (LinearLayout) convertView.findViewById(R.id.lnrLeft);
viewHolder.imgLeft = (ImageView) convertView.findViewById(R.id.imgLeft);
viewHolder.txtLeftTitle = (TextView) convertView.findViewById(R.id.txtLeftTitle);
viewHolder.txtLeftDescription = (TextView) convertView.findViewById(R.id.txtLeftDescription);
viewHolder.txtLeftPubDate = (TextView) convertView.findViewById(R.id.txtLeftPubDate);
viewHolder.lnrRight= (LinearLayout) convertView.findViewById(R.id.lnrRight);
viewHolder.imgRight = (ImageView) convertView.findViewById(R.id.imgRight);
viewHolder.txtRightTitle = (TextView) convertView.findViewById(R.id.txtRightTitle);
viewHolder.txtRightDescription = (TextView) convertView.findViewById(R.id.txtRightDescription);
viewHolder.txtRightPubDate = (TextView) convertView.findViewById(R.id.txtRightPubDate);
convertView.setTag(viewHolder);
}else{
viewHolder = (LazyViewHolder) convertView.getTag();
}
StringBuilder sb = new StringBuilder(data.get(position).getTitle());
int i = 0;
while ((i = sb.indexOf(" ", i + 40)) != -1) {
sb.replace(i, i + 1, "\n");
}
if(position%2==0){
viewHolder.lnrLeft.setVisibility(View.VISIBLE);
viewHolder.lnrRight.setVisibility(View.GONE);
imageLoader.DisplayImage(data.get(position).getBigImage(), viewHolder.imgLeft);
viewHolder.txtLeftTitle.setText(sb.toString());
viewHolder.txtLeftDescription.setText(Html.fromHtml(data.get(position).getBody()).toString());
viewHolder.txtLeftPubDate.setText(data.get(position).getPublishedDate());
}else{
viewHolder.lnrRight.setVisibility(View.VISIBLE);
viewHolder.lnrLeft.setVisibility(View.GONE);
imageLoader.DisplayImage(data.get(position).getBigImage(), viewHolder.imgRight);
viewHolder.txtRightTitle.setText(sb.toString());
viewHolder.txtRightDescription.setText(Html.fromHtml(data.get(position).getBody()).toString());
viewHolder.txtRightPubDate.setText(data.get(position).getPublishedDate());
}
return convertView;
}
}