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 ...
随机推荐
- Volatile实现原理
volatile 在多线程上volatile 是synchronized 轻量级实现.在多核处理器开发中保证了共享变量的"可见性".可见性是指当一个线程修改一个共享变量的时候,另外 ...
- get()和post()方法编码的区别
在做ssh搭建的框架中,在后台条件查询的时候,组合查询传到后台的值一直是乱码,其中在form表单中必须要加上method,这一点是肯定的,但是加上了提交的方式之后,会出现如下问题: 如果使用get方法 ...
- Quartz任务调度器
在使用jdk的timer时发现无法满足开发需求:即无法在指定的日期进行执行任务. 这便引入一个优秀的开源任务调度框架“quartz”. 这里加入的是quartz-1.8.6版本.Quart的官网: ...
- 使用Yeoman快速启动AngularJS项目开发
本博客停止更新,请访问新个人博客:owenchen.net 前言 博客迁移到了BAE上,http://owenchen.net/,以后的文章会首发在自己的博客上,随后在博客园发布. 很久没有写文章了, ...
- bootstrap字体图标在谷歌显示正常,在火狐显示异常的问题
bootstrap字体图标的使用 现在有很多的网站支持字体图标,我所知道的有bootstrap,fontawesome,iconmoon,等等,可能还有其他我并不知道 bootstrap只要你的文件夹 ...
- Maven发布工程到公共库
1.发布工程 新建一个 Maven build 选择要发布的工程
- 总结CSS3新特性(Transition篇)
CSS 过渡(transition), 是 CSS3 规范的一部分, 用来控制 CSS 属性的变化速率. 可以让属性的变化过程持续一段时间,而不是立即生效.比如,将元素的颜色从白色改为黑色,通常这个改 ...
- C# 操作PPt,去掉文本框的边框
using System; using System.Collections.Generic; using System.Linq; using System.Text; using OFFICECO ...
- iOS启动过程
1.main函数 | 2.UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 | 3.delega ...
- Android Studio教程--从Github 下载一个Repository
从电脑上彻底删除HelloWorld项目 回到as欢迎页面 复制github中项目的地址 点击clone