由于某些原因,需要个错位的页面,在网上找不到好的例子,试着动手写了写。

不考虑配色的完成图如下:

首先考虑的是,listview每一行左右都有可能缩进。

先假设一行的布局就是ImageView,TextView,ImageView,代码如下:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <RelativeLayout
android:id="@+id/rl_line"
android:layout_width="match_parent"
android:layout_height="50dp"> <ImageView
android:id="@+id/iv_left"
android:layout_width="50dp"
android:background="#cccccc"
android:layout_height="match_parent"/> <ImageView
android:id="@+id/iv_right"
android:layout_width="50dp"
android:background="#cccccc"
android:layout_height="match_parent"
android:layout_alignParentRight="true"/> <TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/iv_left"
android:layout_toLeftOf="@id/iv_right"
android:background="#ffffff"
android:text="example"
android:textSize="17sp"/> </RelativeLayout> </LinearLayout>

接下来要考虑,如何保证一行靠左,一行靠右呢?

可以通过判断行数,来选择ImageView是否显示,大致如下:

         if(position % 2 == 0){
holder.iv_left.setVisibility(View.GONE);
holder.iv_right.setVisibility(View.VISIBLE);
}
else{
holder.iv_left.setVisibility(View.VISIBLE);
holder.iv_right.setVisibility(View.GONE);
}

之所以还要设置Visibile,是因为第一项和最后一项因为某些原因,会不隐藏ImageView。

这处代码也可以精简。

完成的自定义Adapter如下:

 public class ListviewAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ViewHolder holder;
private int index = 0;
private Context c;
private String string[]; public ListviewAdapter(Context c,String[] string){
super();
this.c = c;
this.string = string;
inflater = LayoutInflater.from(c);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return string.length;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
holder = new ViewHolder();
if(convertView == null){
convertView = inflater.inflate(R.layout.mylistview, null);
holder.tv = (TextView)convertView.findViewById(R.id.tv);
holder.iv_left = (ImageView)convertView.findViewById(R.id.iv_left);
holder.iv_right = (ImageView)convertView.findViewById(R.id.iv_right);
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
holder.tv.setText(string[position]); if(position % 2 == 0){
holder.iv_left.setVisibility(View.GONE);
holder.iv_right.setVisibility(View.VISIBLE);
}
else{
holder.iv_left.setVisibility(View.VISIBLE);
holder.iv_right.setVisibility(View.GONE);
}
return convertView;
} public class ViewHolder{
public TextView tv;
public ImageView iv_left;
public ImageView iv_right;
} }

ListviewAdapter.java

由于两个ImageView设置了颜色为#cccccc,为了保证看起来像一体的,listview的间距和整个页面背景都要设置为#CCCCCC。

activity_main的代码如下:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#cccccc"
tools:context="com.example.listviewdemo.MainActivity" > <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#cccccc"
android:dividerHeight="18dp"/> </RelativeLayout>

activity_main.xml

以及MainActivity:

 public class MainActivity extends Activity {
private ListView lv;
private ListviewAdapter adapter;
private String[] list = new String[]{"aaa","bbb","ccc","ddd","eee",
"111","222","333","444","555"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.lv);
adapter = new ListviewAdapter(this,list);
lv.setAdapter(adapter); lv.setOnItemClickListener(new myOnItemClickListener()); } private class myOnItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), "您选择的是:" + list[position],
Toast.LENGTH_SHORT).show();
}
} public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
} }

MainActivity.java

因为只考虑了实现页面,没有考虑功能,故点击操作只有Toast提示。

如果有好的点子,大概会用这个样式写点什么吧

这样的布局好不好看,仁者见仁智者见智……

2015.8.13更新:

试着改了改,弄出下面的效果图:

事实证明,还是有点用处的嘛(我果然太闲了……)

Android中ListView错位布局实现(无聊向)的更多相关文章

  1. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

  2. android中ListView点击和里边按钮点击不能同时生效问题解决

    今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...

  3. Android中的LinearLayout布局

    LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,  线性布局是按照垂直方向(vertical)或水平方向 ...

  4. Android中Listview点击item不变颜色以及设置listselector 无效

    Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...

  5. Android中的五大布局

    Android中的五大布局 1.了解布局 一个丰富的界面总是要由很多个控件组成的,那我们如何才能让各个控件都有条不紊地 摆放在界面上,而不是乱糟糟的呢?这就需要借助布局来实现了.布局是一种可用于放置很 ...

  6. android中ListView控件&&onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  7. Android中ListView无法点击

    Android中ListView无法点击 转自:http://xqjay19910131-yahoo-cn.iteye.com/blog/1319502   问题描述: ListView中Item加入 ...

  8. android中的常用布局管理器(三)

    接上篇博客 (5)TableLayout     表格布局管理器 在android中,线性布局和表格布局用的是最多的. 在很多的输出操作中,往往会使用表格的形式对显示的数据进行排版,tablelayo ...

  9. Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案

    我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...

随机推荐

  1. <记录学习>(前三天)京东页面各种注意点

    培训学校第1到3天先学习HTML现在流行的是HTML5,目前学习的是HTML5规范.(给有基础一定的人学习)前三天学习的是京东页面的编写,和以前写的不同,页面看上去和自己写的一样,但老师讲的还是有很多 ...

  2. C# 泛型的协变和逆变

    1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量.协变和逆变是两个相互对立的概念: 如 ...

  3. 【我的产品观】开发wangEditor一年总结

    1. 引言 标题说是一周年,其实是不是正好是一周年,我也忘记了,光从github的提交记录看也不准确.印象中觉得,如果要论想法,到现在一年多了,如果要论实际写代码,可能差不多正好一年. 从8月底在济南 ...

  4. InstantClick – 快速响应!让你的网站与众不同

    尽管网络带宽不断增加,但网站并没有更快很多.这是因为最大的瓶颈在于页面加载的延迟.InstantClick 是一个很小的 JavaScript 库,大大加速你的网站响应速度. 在访问者点击一个链接之前 ...

  5. C++11新特性 lambda表达式

    C++11 添加了了一个名为lambda表达式的功能,可以用于添加匿名函数 语法: [capture_block](parameter) mutable exception_specification ...

  6. javascript的switch的使用注意

    如果是以下代码: <script> var t_keleyi_com = 65; switch (t_keleyi_com) { case '65': alert("字符串65. ...

  7. 【web前端面试题整理07】我不理解表现与数据分离。。。

    拜师传说 今天老夫拜师了,老夫有幸认识一个JS高手,在此推荐其博客,悄悄告诉你,我拜他为师了,他承诺我只收我一个男弟子..... 师尊刚注册的账号,现在博客数量还不多,但是后面点会有干货哦,值得期待. ...

  8. Welcome Phalcon

    Welcome! 欢迎来到 Phalcon 框架, 一种崭新的 PHP 框架.我们的使命是给开发者一个开发 web 站点和应用的高级工具,让开发者不用担心框架的性能问题. Phalcon 是什么? P ...

  9. 通过ABAP的标准功能,寻找源代码中的字符串

    程序名称: *ABAP_SOURCE_SCAN 查找 作用:通过这个标准程序,可以在系统的源代码中进行字符串的查找!

  10. 高清VGA编码器|上海视涛科技

    VGA编码器(E200)简介 高清VGA编码器是上海视涛科技出品的高性能VGA编码产品.该VGA编码器是上海视涛科技完全自主研发,并适用于VGA信号的编码采集及网络传输的专用硬件设备.可兼容各厂家的N ...