`

自定义List布局

阅读更多

以下内容Sinfrancis版权所有,专注请注明来自  http://mdev.cc/dev

 

 

自定义布局需要哪些东西?
1、数据模型(数据)
2、显示数据的组件
3、重写BaseAdapter中的相关方法
 
如果list里面加入了如CheckBox之类的组件,需要将这些组件设置能不能聚焦,点击list item的时候才有聚焦的背景


数据模型代码:
package cc.androidos.layout;
public class RSS {
 private String title;
 public RSS(String title) {
  this.title = title;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 @Override
 public String toString() {
  return title;
 }
}
 
显示组件的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:id="@+id/tablelist"
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android">
 <TableRow android:id="@+id/TableRow01" android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TextView android:id="@+id/TextView1" android:layout_width="200px"
   android:layout_height="wrap_content" android:text="TextView1"></TextView>
  <ImageButton android:id="@+id/ImageButton01"
   android:layout_width="wrap_content" android:layout_height="wrap_content"
   android:layout_marginLeft="80px"></ImageButton>
 </TableRow>
 
 
</TableLayout>
 

这个Activity和重写BaseAdapter的代码:

 
package cc.androidos.layout;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.Scroller;
import android.widget.TextView;
public class MyLayout extends ListActivity {
 
 //要被显示的数据模型
 public static  List<RSS> dataModel = new ArrayList<RSS>();
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  getListView().setSelector(getResources().getDrawable(R.drawable.icon));
  //将组定义的List组件加入到当前的Activity中
  setListAdapter(new MyListAdapter(getApplicationContext()));
  
  dataModel.add(new RSS("title 1"));
  dataModel.add(new RSS("title 2"));
  dataModel.add(new RSS("title 3"));
  dataModel.add(new RSS("title 4"));
 }
 
 /*自定义布局组件中用于显示数据的组件类**/
 public class ViewHolder {
  TextView mTextView;
  ImageButton mIcon;
 }
 // 自定义的布局组件
 public class MyListAdapter extends BaseAdapter {
  private LayoutInflater mInflater = null;
  private Bitmap mIcon1 = null;
  private Bitmap mIcon2 = null;
  private Context mcContext = null;
  public MyListAdapter(Context context) {
   this.mcContext = context;
   
   mInflater = LayoutInflater.from(this.mcContext);
   mIcon1 = BitmapFactory.decodeResource(mcContext.getResources(),
     R.drawable.delete);
   mIcon2 = BitmapFactory.decodeResource(mcContext.getResources(),
     R.drawable.delete);
   
  }
  @Override
  public int getCount() {
   return dataModel.size();
  }
  @Override
  public Object getItem(int position) {
   return dataModel.get(position);
  }
  @Override
  public long getItemId(int position) {
   return position;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   String tag = "getView";
   final ViewHolder holder;
   if (convertView == null) {
    //使用XML文件填充整个布局
    convertView = mInflater.inflate(R.layout.list, null);
    holder = new ViewHolder();//生成存放数据的组件模型
    holder.mTextView = (TextView) convertView
      .findViewById(R.id.TextView1);
    holder.mIcon = (ImageButton) convertView
      .findViewById(R.id.ImageButton01);
    convertView.setTag(holder);//将存放数据的组件模型加入到整个View视图中
   } else {
    holder = (ViewHolder) convertView.getTag();
   }
   Log.d(tag, "start get View.....");
   
   holder.mTextView.setText(dataModel.get(position).toString());
   holder.mIcon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
   holder.mIcon.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {//设置按钮点击事件
     holder.mTextView.setBackgroundColor(Color.WHITE);
     holder.mIcon.setVisibility(View.VISIBLE);
    }
   });
   return convertView;
  }
 }
}
 
 这样自定义完成后,显示数据将会有一个图片和一个字符串放在ListActivity中每项中
分享到:
评论
2 楼 yanglinglong1 2010-04-29  
太谢谢你了,顶你,我刚学android打了你的练习之后,终于解决了困扰我的问题!!!
1 楼 heji 2009-11-16  
学习学习!!好东西

相关推荐

    Android Tablayout 自定义Tab布局的使用案例

    Android Tablayout 自定义Tab布局的使用案例 Android Tablayout 是 Android 设计库中的一部分,主要用于实现标签页功能。Tablayout 中的 Tab 可以自定义布局,以满足不同的需求。本文将 introduction 了 Android ...

    WPF的ListView控件自定义布局用法实例

    自定义布局允许开发者根据需求灵活设计ListView显示的内容和样式。本实例将深入讲解如何在WPF中自定义ListView控件的布局。 首先,自定义布局主要涉及到两部分:ControlTemplate和DataTemplate。ControlTemplate...

    自定义list

    1. **创建自定义布局**: 首先,为ListView的每一项(item)创建一个自定义的布局文件。在这个布局中,我们可以使用`shape`资源来定义一个具有圆角的矩形背景。例如,可以在res/drawable目录下创建一个xml文件,如`...

    QListWidget自定义布局例程

    本示例主要讲解如何自定义QListWidget的布局,使其能更好地满足用户界面的需求。我们将从以下几个方面展开讨论: 1. **QListWidgetItem类型**:QListWidget的基本单元是QListWidgetItem,它代表了列表中的一个条目...

    Android自定义list的item显示内容

    本篇文章将深入探讨如何在Android中实现自定义list的item显示内容。 首先,我们需要创建一个自定义的布局文件,这个布局文件将作为ListView中的每个item。在`res/layout`目录下创建一个新的XML布局文件,例如`...

    自定义布局的动态加载listView

    1. 创建布局文件:为ListView的每一项创建一个单独的XML布局文件,例如`list_item.xml`,在这个文件中定义你需要显示的元素和样式。 2. 创建自定义Adapter:继承`BaseAdapter`或者`ArrayAdapter`,并重写其中的方法...

    自定义ListView(适配器和布局)

    本文将深入探讨如何通过适配器(Adapter)和自定义布局来实现一个功能丰富的自定义ListView。 一、适配器(Adapter)的理解与应用 适配器是Android中连接数据源和UI控件的关键桥梁,它将数据转换成可以被ListView...

    一个list中多布局加载实现

    因此,为了实现多布局,我们首先需要自定义一个Adapter。 1. **创建多布局的Adapter** - 创建一个新的继承自BaseAdapter的类,如`MyCustomAdapter`。 - 在Adapter中定义两个或者更多的ViewHolder类,每个...

    Kotlin语言实现FlexboxLayout流式布局替换Recycleview实现单选/多选

    class FlexAdapter(private val items: List) : FlexboxLayoutManager.FlexboxAdapter() { // 实现相关方法,如 onCreateViewHolder, onBindViewHolder 等,根据 FlexItem 的 isSelected 设置视图的选中状态 } ``` ...

    android demo,自定义支持横向滚动的ListView。

    MeasureSpec包含尺寸模式(如EXACTLY、AT_MOST、UNSPECIFIED)和具体尺寸,是自定义布局时的重要概念。 3. **布局参数**: 自定义ViewGroup中的子视图(列表项)通常需要设置合适的布局参数,如宽度和高度。这些...

    android listview 自定义样式实例

    - **自定义ListView项布局**:首先,你需要创建一个XML布局文件来定义ListView每一项的显示样式。这可以通过在`res/layout`目录下创建一个新的XML文件来完成,例如`list_item.xml`。在这个文件中,你可以自由添加...

    自定义list适配器

    自定义ListAdapter是实现ListView功能的关键,它允许开发者根据自己的需求定制ListView的显示样式和行为。在这个小例子中,我们没有涉及到数据库操作,而是专注于如何创建和使用自定义的适配器。 首先,了解...

    BottomDialog:可高度自定义的底部布局,使用BottomSheet,支持滚动布局,同时底部布局不会因BottomSheet未显示全部内容而隐藏

    支持自定义标题布局(Toolbar ...),内容布局(列表,文字)和底部布局(按钮,BottomAppBar) 底部布局自适应导航栏 只在类原生机器测试过,不保证支持国产定制系统 支持Activity形式的Dialog...

    可展开可收缩的列表,可自定义布局

    标题"可展开可收缩的列表,可自定义布局"表明我们将探讨如何使用`ExpandListView`并定制其布局以满足个性化需求。 首先,`ExpandListView`继承自`ListView`,因此具备`ListView`的基本功能,如滚动、长按事件等。但...

    在ListView中添加Button并且自定义布局和获取输入框中值的方法

    本篇将详细介绍如何在ListView中添加Button,自定义布局,并获取输入框中的值。 首先,我们需要创建一个自定义的布局文件。在`res/layout`目录下创建一个新的XML布局文件,例如`list_item.xml`。在这个文件中,我们...

    代码实现List下载列表(安卓自定义控件,List列表)

    本文将深入探讨如何实现一个基于List的下载列表控件,并着重讲解两个关键点:xml布局实现和代码布局及默认图像的处理。 首先,让我们来看看`listForDownload(xml布局实现).rar`中的内容。在安卓中,XML布局文件是...

    Android自定义Dialog多选对话框(Dialog+Listview+CheckBox)

    2. `list_item.xml` - ListView中每一项的布局,包含一个CheckBox。 3. `MyDialog.java` - 自定义Dialog类的实现。 4. `MyListAdapter.java` - 自定义的ListView适配器,包含全选和取消全选的逻辑。 总结起来,这个...

    自定义listview实现联系人排序

    newView()负责从布局资源中创建新的View,bindView()则将Cursor中的数据绑定到View上。 ```java public class ContactAdapter extends CursorAdapter { public ContactAdapter(Context context, Cursor c, boolean...

    自定义PickView.rar

    数据可以是字符串数组、List或其他自定义对象,需要实现适配器(Adapter)来将这些数据转化为可显示的视图。 5. **滚动逻辑** 在自定义View类中实现滚动逻辑,可以使用Scroller类或者VelocityTracker来处理平滑...

    使用PopupWindow自定义弹窗

    // 设置内容视图,可以是自定义的布局 View contentView = LayoutInflater.from(context).inflate(R.layout.popup_view, null); popupWindow.setContentView(contentView); // 设置宽度和高度 popupWindow.setWidth...

Global site tag (gtag.js) - Google Analytics