Android中ListView错位布局实现(无聊向)
由于某些原因,需要个错位的页面,在网上找不到好的例子,试着动手写了写。
不考虑配色的完成图如下:

首先考虑的是,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错位布局实现(无聊向)的更多相关文章
- Android中ListView控件的使用
Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...
- android中ListView点击和里边按钮点击不能同时生效问题解决
今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...
- Android中的LinearLayout布局
LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了, 线性布局是按照垂直方向(vertical)或水平方向 ...
- Android中Listview点击item不变颜色以及设置listselector 无效
Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...
- Android中的五大布局
Android中的五大布局 1.了解布局 一个丰富的界面总是要由很多个控件组成的,那我们如何才能让各个控件都有条不紊地 摆放在界面上,而不是乱糟糟的呢?这就需要借助布局来实现了.布局是一种可用于放置很 ...
- android中ListView控件&&onItemClick事件中获取listView传递的数据
http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...
- Android中ListView无法点击
Android中ListView无法点击 转自:http://xqjay19910131-yahoo-cn.iteye.com/blog/1319502 问题描述: ListView中Item加入 ...
- android中的常用布局管理器(三)
接上篇博客 (5)TableLayout 表格布局管理器 在android中,线性布局和表格布局用的是最多的. 在很多的输出操作中,往往会使用表格的形式对显示的数据进行排版,tablelayo ...
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...
随机推荐
- go语言 类型:数组切片
初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切 ...
- [deviceone开发]-课程表的例子
一.简介 这个例子是根据一个真实app的一个页面的需求来实现的demo,通过动态add ui的方式,动态bind数据构建一个完整的课程表示例.示例并不完善,但是可以给大家一个启发. 二.效果图 三.相 ...
- CSS常见兼容性问题
DOCTYPE 影响 CSS 处理 Firefox: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 Firefox: body 设置 tex ...
- 你真的知道setTimeout是如何运行的吗
大家看下如下代码,猜猜执行结果: var start = new Date; setTimeout(function(){ console.log('时间流逝了:'+(new Date - start ...
- SharePoint 2013 直接给AD 组赋权限后,AD组里的用户还是登陆不了SharePoint,提示没有权限
直接给一个all person的AD组赋了个read权限,然后将一个名为“all beijing”的组加到all person组里,但是all beijing组里的人却不能登录sharepoint,提 ...
- 使用Reaver对WPS加密网络进行暴力破解
WPS状态探测 探测开启了WPS功能的AP,WPS Locked状态为NO的表示开启了WPS功能. wash -i wlan0mon PIN码获取 reaver -i wlan0mon -b MAC地 ...
- Android通过PHP服务器实现登录
Android客户端和PHP.MySQL搭建的服务器之间的简单交互,实现登录功能 . 实现原理图: Handler消息机制原理: Handler机制主要包括4个关键对象,分别是Message.Hand ...
- iOS 用webView加载后台返回的HTML数据
返回数据: <p><b>\U516c\U53f8\U7b80\U4ecb</b></p><p> \U5584\U76c8\U7ba1\ ...
- 【代码笔记】iOS-UIScrollerView里有两个tableView
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- 【代码笔记】iOS-点击任何处,显示出红色的UIView
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> //头文件 #import "MoreView. ...