仿照iphone设置点击更多显示全部内容

2023-12-25 06:38

本文主要是介绍仿照iphone设置点击更多显示全部内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ListView里每一条显示版本信息,由于内容过长只显示部分,展开后能显示全部内容,并且再次点击收缩。

自定义View

public class CollapsableTextView extends LinearLayout implementsView.OnClickListener {/** default text show max lines */private static final int DEFAULT_MAX_LINE_COUNT = 3;private static final int COLLAPSIBLE_STATE_NONE = 0;private static final int COLLAPSIBLE_STATE_SHRINKUP = 1;private static final int COLLAPSIBLE_STATE_SPREAD = 2;private TextView mVersionDetail;private TextView mMoreState;private String shrinkup;private String spread;private int mState = COLLAPSIBLE_STATE_SPREAD;private boolean flag;public CollapsableTextView(Context context, AttributeSet attrs) {super(context, attrs);shrinkup = context.getString(R.string.shrinkup);spread = context.getString(R.string.spread);View view = inflate(context, R.layout.preference_list_item, this);view.setPadding(0, -1, 0, 0);mVersionDetail = (TextView) view.findViewById(R.id.detail);mMoreState = (TextView) view.findViewById(R.id.more);mMoreState.setTextColor(context.getResources().getColor(R.color.holo_blue_dark));mMoreState.setOnClickListener(this);}public CollapsableTextView(Context context) {this(context, null);}public void setDesc(CharSequence charSequence, TextView.BufferType bufferType) {mVersionDetail.setText(charSequence, bufferType);mState = COLLAPSIBLE_STATE_SPREAD;requestLayout();}@Overridepublic void onClick(View v) {flag = !flag;requestLayout();}/**** @param view detail* @return state*/private int checkViewState(TextView view) {Layout layout = view.getLayout();if (layout != null) {int lines = layout.getLineCount();if (lines > 0) {if (layout.getEllipsisCount(lines - 1) == 0) {if (view.getLineCount() <= DEFAULT_MAX_LINE_COUNT) {return COLLAPSIBLE_STATE_NONE;} else {return COLLAPSIBLE_STATE_SPREAD;}}}}return COLLAPSIBLE_STATE_SHRINKUP;}public void updateView() {mState = checkViewState(mVersionDetail);mMoreState.setVisibility(mState > 0 ? View.VISIBLE : View.INVISIBLE);if (mState > 0) {mMoreState.setText(mState == COLLAPSIBLE_STATE_SPREAD ? shrinkup : spread);}}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);updateView();Log.i(ConstantUtil.TAG, "onLayout:" + mVersionDetail.getLineCount() + "," + flag + "," +mMoreState.getVisibility() + "," + checkViewState(mVersionDetail));if (!flag) {flag = true;if (checkViewState(mVersionDetail) == COLLAPSIBLE_STATE_NONE) {mVersionDetail.setMaxLines(DEFAULT_MAX_LINE_COUNT);} else {post(new InnerRunnable());}}}class InnerRunnable implements Runnable {@Overridepublic void run() {Log.i(ConstantUtil.TAG, "Runnable :" + mState);if (mState == COLLAPSIBLE_STATE_SPREAD) {mVersionDetail.setMaxLines(DEFAULT_MAX_LINE_COUNT);mMoreState.setText(spread);mState = COLLAPSIBLE_STATE_SHRINKUP;} else if (mState == COLLAPSIBLE_STATE_SHRINKUP) {mVersionDetail.setMaxLines(Integer.MAX_VALUE);mMoreState.setText(shrinkup);mState = COLLAPSIBLE_STATE_SPREAD;}}}}

Activity页面包含Listview,Adapter由于ListView复用的原因,需要重新requestLayout。

public class PreferenceList extends ListActivity implements AdapterView.OnItemClickListener{PreferenceListAdapter mAdapter;JSONArray mVersionList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mVersionList = getData();getListView().setOnItemClickListener(this);getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);mAdapter = new PreferenceListAdapter();setListAdapter(mAdapter);}private JSONArray getData() {JsonHelper helper = new JsonHelper();JSONArray list = null;try {list = helper.getJson(this, ConstantUtil.JSON_FILE_NAME);} catch (JSONException e) {e.printStackTrace();}return list;}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {view.findViewById(R.id.more).performClick();}private class PreferenceListAdapter extends BaseAdapter {private ViewHolder mHolder;PreferenceListAdapter() {}@Overridepublic int getCount() {return mVersionList.length();}@Overridepublic Object getItem(int position) {Object item = null;try {item = mVersionList.getJSONObject(position);} catch (JSONException e) {e.printStackTrace();}return item;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {mHolder = new ViewHolder();convertView = View.inflate(PreferenceList.this, R.layout.preference_item, null);mHolder.version = (TextView) convertView.findViewById(R.id.version);mHolder.date = (TextView) convertView.findViewById(R.id.date);mHolder.detail = (TextView) convertView.findViewById(R.id.detail);convertView.setTag(mHolder);} else {mHolder = (ViewHolder) convertView.getTag();convertView.requestLayout();}Log.i(ConstantUtil.TAG, "getView: " + position);try {mHolder.version.setText(mVersionList.getJSONObject(position).getString("check_version"));mHolder.date.setText(mVersionList.getJSONObject(position).getString("date"));mHolder.detail.setText(mVersionList.getJSONObject(position).getString("version_detail"));} catch (JSONException e) {e.printStackTrace();}return convertView;}}private class ViewHolder {TextView version;TextView date;TextView detail;}}

布局文件比较简单,就看自定义布局

<com.example.zxz.asdemo.data.CollapsableTextViewxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="vertical"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity"></com.example.zxz.asdemo.data.CollapsableTextView>

android:textAppearance="?android:attr/textAppearanceSmall" 

字体样式




这篇关于仿照iphone设置点击更多显示全部内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/534560

相关文章

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的