我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android开发中ListView自定义adapter的封装

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android开发中ListView自定义adapter的封装

【引入】 

我们一般编写listView的时候顺序是这样的:
 •需要展示的数据集List<T>
 •为这个数据集编写一个ListView
 •为这个ListView编写一个Adapter,一般继承自BaseAdapter
 •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率 

分析:

List<T>:ListView --> Adapter extends BaseAdapter --> ViewHolder 

一般情况下,一个ListView对应一个Adapter类,对应一个ViewHolder类,那如果一个app中有20个ListView,我们岂不是要写20遍?所以的做法是:
 •抽取ViewHolder,作为公共的类。
 •将Adapter封装成CommonAdapter,作为公共的类。 

一、传统方式编写适配器: 

(1)activity_main.xml: 


<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">
<ListView
 android:id="@+id/listView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"></ListView>
</RelativeLayout>

(2)item_listview.xml:单个item的布局文件 


<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:padding="10dp">
 <TextView
 android:id="@+id/titleTv"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:singleLine="true"
 android:text="Android新技能"
 android:textColor="#444"
 android:textSize="16sp" />
 <TextView
 android:id="@+id/descTv"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@+id/titleTv"
 android:layout_marginTop="10dp"
 android:maxLines="2"
 android:minLines="1"
 android:text="Android为ListView和GridView打造万能适配器"
 android:textColor="#898989"
 android:textSize="16sp" />
 <TextView
 android:id="@+id/timeTv"
 android:paddingTop="3dp"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/descTv"
 android:layout_marginTop="10dp"
 android:text="2015-05-04"
 android:textColor="#898989"
 android:textSize="12sp" />
 <TextView
 android:padding="2dp"
 android:id="@+id/phoneTv"
 android:gravity="center"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/descTv"
 android:layout_marginTop="10dp"
 android:background="#2ED667"
 android:drawableLeft="@mipmap/phone"
 android:drawablePadding="5dp"
 android:text="10086"
 android:textColor="#ffffff"
 android:textSize="12sp"
 android:layout_alignParentRight="true" />
</RelativeLayout>

其对应的布局效果如下:

(3)Bean.java:ListView的数据集


package com.smyhvae.baseadapter.entities;

public class Bean {
 private String title;
 private String desc;
 private String time;
 private String phone;
 public Bean() {
 }
 public Bean(String title, String desc, String time, String phone) {
 this.title = title;
 this.desc = desc;
 this.time = time;
 this.phone = phone;
 }
 public String getTitle() {
 return title;
 }
 public void setTitle(String title) {
 this.title = title;
 }
 public String getDesc() {
 return desc;
 }
 public void setDesc(String desc) {
 this.desc = desc;
 }
 public String getTime() {
 return time;
 }
 public void setTime(String time) {
 this.time = time;
 }
 public String getPhone() {
 return phone;
 }
 public void setPhone(String phone) {
 this.phone = phone;
 }
}

(4)MyAdapter.java:自定义适配器,继承自BaseAdapter 


package com.smyhvae.baseadapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.smyhvae.baseadapter.entities.Bean;
import java.util.List;

public class MyAdapter extends BaseAdapter {
 private LayoutInflater mInflater;
 private List<Bean> mDatas;
 //MyAdapter需要一个Context,通过Context获得Layout.inflater,然后通过inflater加载item的布局
 public MyAdapter(Context context, List<Bean> datas) {
 mInflater = LayoutInflater.from(context);
 mDatas = datas;
 }
 //返回数据集的长度
 @Override
 public int getCount() {
 return mDatas.size();
 }
 @Override
 public Object getItem(int position) {
 return mDatas.get(position);
 }
 @Override
 public long getItemId(int position) {
 return position;
 }
 //这个方法才是重点,我们要为它编写一个ViewHolder
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
 ViewHolder holder = null;
 if (convertView == null) {
  convertView = mInflater.inflate(R.layout.item_listview, parent, false); //加载布局
  holder = new ViewHolder();
  holder.titleTv = (TextView) convertView.findViewById(R.id.titleTv);
  holder.descTv = (TextView) convertView.findViewById(R.id.descTv);
  holder.timeTv = (TextView) convertView.findViewById(R.id.timeTv);
  holder.phoneTv = (TextView) convertView.findViewById(R.id.phoneTv);
  convertView.setTag(holder);
 } else { //else里面说明,convertView已经被复用了,说明convertView中已经设置过tag了,即holder
  holder = (ViewHolder) convertView.getTag();
 }
 Bean bean = mDatas.get(position);
 holder.titleTv.setText(bean.getTitle());
 holder.descTv.setText(bean.getDesc());
 holder.timeTv.setText(bean.getTime());
 holder.phoneTv.setText(bean.getPhone());
 return convertView;
 }
 //这个ViewHolder只能服务于当前这个特定的adapter,因为ViewHolder里会指定item的控件,不同的ListView,item可能不同,所以ViewHolder写成一个私有的类
 private class ViewHolder {
 TextView titleTv;
 TextView descTv;
 TextView timeTv;
 TextView phoneTv;
 }
}

(5)MainActivity.java: 


package com.smyhvae.baseadapter;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import com.smyhvae.baseadapter.entities.Bean;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
 private ListView listView;
 private List<Bean> mDatas;
 private MyAdapter mAdapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initView();
 initData();
 }
 //方法:初始化View
 private void initView() {
 listView = (ListView) findViewById(R.id.listView);
 }
 //方法;初始化Data
 private void initData() {
 mDatas = new ArrayList<Bean>();
 //将数据装到集合中去
 Bean bean = new Bean("Android新技能1", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 bean = new Bean("Android新技能2", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 bean = new Bean("Android新技能3", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 bean = new Bean("Android新技能4", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 //为数据绑定适配器
 mAdapter = new MyAdapter(this,mDatas);
 listView.setAdapter(mAdapter);
 }
}

运行效果如下:

 

【工程文件】 
2015-05-04-BaseAdapter的传统写法.rar

二、ListView中自定义adapter的封装(万能的写法来编写适配器): 
完整版代码如下: 

(1)activity_main.xml: 


<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">
<ListView
 android:id="@+id/listView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"></ListView>
</RelativeLayout>

(2)item_listview.xml.xml:(ListView中单个item的布局) 


<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:padding="10dp">
 <TextView
 android:id="@+id/titleTv"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:singleLine="true"
 android:text="Android新技能"
 android:textColor="#444"
 android:textSize="16sp" />
 <TextView
 android:id="@+id/descTv"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_below="@+id/titleTv"
 android:layout_marginTop="10dp"
 android:maxLines="2"
 android:minLines="1"
 android:text="Android为ListView和GridView打造万能适配器"
 android:textColor="#898989"
 android:textSize="16sp" />
 <TextView
 android:id="@+id/timeTv"
 android:paddingTop="3dp"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/descTv"
 android:layout_marginTop="10dp"
 android:text="2015-05-04"
 android:textColor="#898989"
 android:textSize="12sp" />
 <TextView
 android:padding="2dp"
 android:id="@+id/phoneTv"
 android:gravity="center"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/descTv"
 android:layout_marginTop="10dp"
 android:background="#2ED667"
 android:drawableLeft="@mipmap/phone"
 android:drawablePadding="5dp"
 android:text="10086"
 android:textColor="#ffffff"
 android:textSize="12sp"
 android:layout_alignParentRight="true" />
</RelativeLayout>

其对应的布局效果如下:

 

(3)Bean.java:数据集 


package com.smyhvae.baseadapter.entities;

public class Bean {
 private String title;
 private String desc;
 private String time;
 private String phone;
 public Bean() {
 }
 public Bean(String title, String desc, String time, String phone) {
 this.title = title;
 this.desc = desc;
 this.time = time;
 this.phone = phone;
 }
 public String getTitle() {
 return title;
 }
 public void setTitle(String title) {
 this.title = title;
 }
 public String getDesc() {
 return desc;
 }
 public void setDesc(String desc) {
 this.desc = desc;
 }
 public String getTime() {
 return time;
 }
 public void setTime(String time) {
 this.time = time;
 }
 public String getPhone() {
 return phone;
 }
 public void setPhone(String phone) {
 this.phone = phone;
 }
}

(4)【可复用的代码】ViewHolder.java: 


package com.smyhvae.baseadapter.utils;
import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ViewHolder {
 private SparseArray<View> mViews;
 private int mPosition;
 private View mConvertView;
 public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
 this.mPosition = position;
 this.mViews = new SparseArray<View>();
 mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
 mConvertView.setTag(this);
 }
 public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
 if (convertView == null) {
  return new ViewHolder(context, parent, layoutId, position);
 } else {
  ViewHolder holder = (ViewHolder) convertView.getTag();
  holder.mPosition = position; //即使ViewHolder是复用的,但是position记得更新一下
  return holder;
 }
 }
 
 //使用的是泛型T,返回的是View的子类
 public <T extends View> T getView(int viewId) {
 View view = mViews.get(viewId);
 if (view == null) {
  view = mConvertView.findViewById(viewId);
  mViews.put(viewId, view);
 }
 return (T) view;
 }
 public View getConvertView() {
 return mConvertView;
 }
}

(5)【可复用的代码】ListViewAdapter.java:自定义的通用适配器,继承自BaseAdapter。以后如果是自定义ListView的adapter,继承它就行了 


package com.smyhvae.baseadapter.utils;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.List;

public abstract class ListViewAdapter<T> extends BaseAdapter {
 //为了让子类访问,于是将属性设置为protected
 protected Context mContext;
 protected List<T> mDatas;
 protected LayoutInflater mInflater;
 private int layoutId; //不同的ListView的item布局肯能不同,所以要把布局单独提取出来
 public ListViewAdapter(Context context, List<T> datas, int layoutId) {
 this.mContext = context;
 mInflater = LayoutInflater.from(context);
 this.mDatas = datas;
 this.layoutId = layoutId;
 }
 @Override
 public int getCount() {
 return mDatas.size();
 }
 @Override
 public T getItem(int position) {
 return mDatas.get(position);
 }
 @Override
 public long getItemId(int position) {
 return position;
 }
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
 //初始化ViewHolder,使用通用的ViewHolder,一行代码就搞定ViewHolder的初始化咯
 ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position);//layoutId就是单个item的布局
 convert(holder, getItem(position));
 return holder.getConvertView(); //这一行的代码要注意了
 }
 //将convert方法公布出去
 public abstract void convert(ViewHolder holder, T t);
}

(6)ListViewAdapterWithViewHolder.java:继承自ListViewAdapter 


package com.smyhvae.baseadapter;
import android.content.Context;
import android.widget.TextView;
import com.smyhvae.baseadapter.entities.Bean;
import com.smyhvae.baseadapter.utils.ListViewAdapter;
import com.smyhvae.baseadapter.utils.ViewHolder;
import java.util.List;

public class ListViewAdapterWithViewHolder extends ListViewAdapter<Bean> {
 //MyAdapter需要一个Context,通过Context获得Layout.inflater,然后通过inflater加载item的布局
 public ListViewAdapterWithViewHolder(Context context, List<Bean> datas) {
 super(context, datas, R.layout.item_listview);
 }
 @Override
 public void convert(ViewHolder holder, Bean bean) {
 ((TextView) holder.getView(R.id.titleTv)).setText(bean.getTitle());
 ((TextView) holder.getView(R.id.descTv)).setText(bean.getDesc());
 ((TextView) holder.getView(R.id.timeTv)).setText(bean.getTime());
 ((TextView) holder.getView(R.id.phoneTv)).setText(bean.getPhone());

 }
}

(7)MainActivity.java: 


package com.smyhvae.baseadapter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import com.smyhvae.baseadapter.entities.Bean;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
 private ListView listView;
 private List<Bean> mDatas;
 private ListViewAdapterWithViewHolder listViewAdapterWithViewHolder;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initView();
 initData();
 }
 //方法:初始化View
 private void initView() {
 listView = (ListView) findViewById(R.id.listView);
 }
 //方法;初始化Data
 private void initData() {
 mDatas = new ArrayList<Bean>();
 //将数据装到集合中去
 Bean bean = new Bean("Android新技能1", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 bean = new Bean("Android新技能2", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 bean = new Bean("Android新技能3", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 bean = new Bean("Android新技能4", "Android为ListView和GridView打造万能适配器", "2015-05-04", "10086");
 mDatas.add(bean);
 //为数据绑定适配器
 listViewAdapterWithViewHolder = new ListViewAdapterWithViewHolder(this, mDatas);
 listView.setAdapter(listViewAdapterWithViewHolder);
 }
}

运行效果:

 

这样的话,以后每写个ListView,就这么做:直接导入ViewHolder.java和ListViewAdapter,然后写一个自定义adapter继承自ListViewAdapter就行了。 

【工程文件】2015-05-04-BaseAdapter的封装.rar

三、常见问题: 

1、item控件抢占焦点: 

假设item里有一个checkbox,那运行程序之后,发现只有checkBox能被点击,而item中的其他位置不能被点击(包括点击整个item也没有反应),这是由于checkbox抢占了整个item的焦点。办法是:: 

办法1:为该checkBox设置属性:android:focusable = "false"
办法2:为该item设置属性:android:descendantFocusability = "blocksDescendants" 

不让这个item的焦点从上往下传。 

2、ListView复用导致内容错乱。

您可能感兴趣的文章:Android自定义Adapter的ListView的思路及代码android开发中ListView与Adapter使用要点介绍Android listview与adapter详解及实例代码Android ListView适配器(Adapter)优化方法详解Android Adapter里面嵌套ListView实例详解Android ListView自定义Adapter实现仿QQ界面Android ListView和Adapter数据适配器的简单介绍Android UI:ListView - SimpleAdapter实例详解Android开发实现ListView和adapter配合显示图片和文字列表功能示例


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android开发中ListView自定义adapter的封装

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android开发中ListView自定义adapter的封装

【引入】 我们一般编写listView的时候顺序是这样的: 需要展示的数据集List 为这个数据集编写一个ListView 为这个ListView编写一个Adapter,一般继承自BaseAdapter 在BaseAdapte
2022-06-06

Android自定义Adapter的ListView的思路及代码

在开发中,我们经常使用到ListView这个控件。Android的API也提供了许多创建ListView适配器的快捷方式。例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。但你是否发现,如
2022-06-06

Android中利用ViewHolder优化自定义Adapter的写法(必看)

最近写Adapter写得多了,慢慢就熟悉了。 用ViewHolder,主要是进行一些性能优化,减少一些不必要的重复操作。(WXD同学教我的。) 具体不分析了,直接上一份代码吧:public class MarkerItemAdapter e
2022-06-06

Android开发中自定义editText下划线

这篇文章主要介绍了Android开发中自定义editText下划线的相关资料,需要的朋友可以参考下
2023-03-08

Android开发中怎么自定义时间轴

今天就跟大家聊聊有关Android开发中怎么自定义时间轴,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体内容如下 时间轴效果,实际上非常简单,就是listView中一个又一个的条目
2023-05-31

Android开发中怎么样实现自定义toast

这篇文章将为大家详细讲解有关Android开发中怎么样实现自定义toast,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体方法如下://自定义布局的toastcustomViewToast
2023-05-31

Android开发中如何自定义加载动画

这篇文章主要为大家展示了“Android开发中如何自定义加载动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android开发中如何自定义加载动画”这篇文章吧。一、demo简介1.效果展示如下
2023-06-29

Android开发中如何自定义editText下划线

这篇文章主要介绍“Android开发中如何自定义editText下划线”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android开发中如何自定义editText下划线”文章能帮助大家解决问题。效果
2023-07-05

Android开发中如何实现自定义ProgressBar的样式

Android开发中如何实现自定义ProgressBar的样式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。样式资源:progressbar_bg.xml,放在
2023-05-31

Android应用开发中自定义ViewGroup的究极攻略

支持margin,gravity以及水平,垂直排列 最近在学习android的view部分,于是动手实现了一个类似ViewPager的可上下或者左右拖动的ViewGroup,中间遇到了一些问题(例如touchEvent在onIntercep
2022-06-06

小程序开发实战指南之封装自定义弹窗组件

最近在做公司的小程序项目,发现设计上有很多不统一,代码上有很多冗余,下面这篇文章主要给大家介绍了关于小程序开发实战指南之封装自定义弹窗组件的相关资料,需要的朋友可以参考下
2022-11-13

uniapp小程序开发组件封装之自定义轮播图效果

这篇文章主要介绍了uniapp小程序开发组件封装之自定义轮播图,本文主要展示小程序端封装轮播图组件,使用的是uniapp进行的开发,主要使用的是uniapp官网提供的swiper组件,需要的朋友可以参考下
2023-02-06

Android开发中MJRefresh自定义刷新动画效果

【一】常见用法 最原始的用法,耦合度低,但是不能统一管理。我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个控制器的去定位、修改。 1.1 使用默认刷新(耦合度底,但是想统一修改起来特别麻烦)self.ta
2022-06-06

Android自定义控件开发实战之实现ListView下拉刷新实例代码

这篇博客为大家介绍一个android常见的功能——ListView下拉刷新:首先下拉未松手时候手机显示这样的界面:下面的代码是自定的扎样的控件:2022-06-06

Android App开发中自定义View和ViewGroup的实例教程

View Android所有的控件都是View或者View的子类,它其实表示的就是屏幕上的一块矩形区域,用一个Rect来表示,left,top表示View相对于它的parent View的起点,width,height表示View自己的宽高
2022-06-06

Android开发之自定义数字键盘的示例

这篇文章给大家分享的是有关Android开发之自定义数字键盘的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图加载键盘存储键属性的XML描述我们下面的介绍都是依靠上图的实现来展开的,首先是软键盘的布局,我
2023-05-30

Android应用开发中自定义ViewGroup视图容器的教程

一、概述 在写代码之前,我必须得问几个问题: 1、ViewGroup的职责是啥? ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性,都是为用于告诉容器的),我们的宽度(
2022-06-06

在Android开发中使用自定义组合控件的例子

一、定义一个XML布局文件 setting_item_view.xml 2022-06-06

python中如何自定义封装带颜色的logging模块

本文小编为大家详细介绍“python中如何自定义封装带颜色的logging模块”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中如何自定义封装带颜色的logging模块”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
2023-06-29

Android开发自定义TextView省略号样式的方法

本文实例讲述了Android开发自定义TextView省略号样式的方法。分享给大家供大家参考,具体如下:在布局xml中设置textView的字段 android:maxLines="2" android:ellipsize="end"字段
2023-05-30

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录