自定义view

Android中的LayoutInflater有什么作用?

≯℡__Kan透↙ 提交于 2020-03-14 18:15:40
Android中的 LayoutInflater 什么用? #1楼 这是另一个与前一个类似的示例,但进一步展示了它可以提供的膨胀参数和动态行为。 假设您的ListView行布局可以包含可变数量的TextView。 所以首先你膨胀基础项View(就像前面的例子一样),然后在运行时循环动态添加TextViews。 使用android:layout_weight还可以完美地对齐所有内容。 以下是Layouts资源: list_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/field1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2"/> <TextView android:id="@+id

Material Design & Android 5

ⅰ亾dé卋堺 提交于 2020-03-14 12:17:31
最近研究了一下Material Design和Android 5的新特性,这里做下总结归纳。 Material Design 在我认为就是类似于卡片一样的设计,当然并不只是卡片,material design可以把一个布局或者控件当做实际生活中得一个卡片来对待。 那么具有以下几个方面的属性(具体参照 http://www.google.com/design/spec/material-design/introduction.html 上面某些效果看起来还是挺炫的): 物理属性——卡片是三维的,在z坐标上只有1dp厚;具有投影,不同高度的投影效果不一样;任何颜色、形状和内容都可以在material上显示且不增加厚度;卡片之间不能相互重叠,相互穿过,阻塞点击触摸事件。 变换属性——可以改变形状、合并、拆分然后合并,但不可以弯曲和折叠。 运动属性——可以自然的被创建或者销毁,可以任意移动,用户与material的交互一般通过z轴变化和波纹动画展示 同时material design定义了许多了规范,是经过google产品设计工程师用心总结起来,总体看起来体验蛮炫。具体效果可以参照chrome的新书签,感觉比以前高大上许多。在手机设备上也定义了一些规范,这里只总结个人较为关注和在手机上比较好实现的一些规范。   布局: layout一般内容距离边界边距为16dp    可触摸控件

Android性能优化--Listview优化

删除回忆录丶 提交于 2020-03-13 15:04:38
ListView 的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个item,要求 adapter “返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项。如果你的getCount()返回值是0的话,列表一行都不会显示,如果返回1,就只显示一行。返回几则显示几行。如果我们有几千几万甚至更多的item要显示怎么办?为每个Item创建一个新的View?不可能!!!实际上Android早已经缓存了这些视图,大家可以看下下面这个截图来理解下,这个图是解释ListView工作原理的最经典的图了大家可以收藏下,不懂的时候拿来看看,加深理解,其实Android中有个叫做Recycler的构件,顺带列举下与Recycler相关的已经由Google做过N多优化过的东东比如:AbsListView.RecyclerListener、ViewDebug.RecyclerTraceType等等,要了解的朋友自己查下,不难理解,下图是ListView加载数据的工作原理(原理图看不清楚的点击后看大图)

Android自定义View——滑动按钮 (一)

风流意气都作罢 提交于 2020-03-13 10:32:29
需要继承 View 或 ViewGroup 需要了解自定义的类中,需实现三种方法(在MainActivity的onResume方法之后进行的) /** * 测量 摆放 绘制 * measure -> layout -> draw * onMeasure onLayout onDraw * * View * onMeasure(指定自己宽高) onDraw 绘制自己内容 * * ViewGroup * onMeasure(指定自己宽高,所有子View宽高) onLayout(摆放所有子View) onDraw 绘制内容 * */ 预先准备两张图片 1)新建ToggleView类,继承 android.view.View public class ToggleView extends View { /** * 用于代码创建 */ public ToggleView(Context context) { super(context); } /** * 用于xml创建,可指定自定义属性 */ public ToggleView(Context context, AttributeSet attrs) { super(context, attrs); } /** * 用于xml创建,可指定自定义属性.(如果指定了样式) */ public ToggleView(Context context

Android开发进阶 -- 通用适配器 CommonAdapter

感情迁移 提交于 2020-03-12 09:41:50
在Android开发中,我们经常会用到ListView 这个组件,为了将ListView 的内容展示出来,我们会去实现一个Adapter来适配,将Layout中的布局以列表的形式展现到组件中。   比如,像 GGTalk 安卓版的查找用户功能,会把符合条件的用户都列在下面: 为了达到这个效果,我们需要实现一个自定义的Adapter,而其它地方的ListView也要实现一个Adapter,这些Adapter会有很多重复的代码,非常繁琐,现在我就将重复代码封装到了一个通用的适配器CommonAdapter中,这样,在使用时只要继承CommonAdapter就可以了,如此就避免了大段代码的重复,让代码更简洁易懂。我们先来看看CommonAdapter的定义。   一.CommonAdapter 实现 public abstract class CommonAdapter<T> extends BaseAdapter { private List<T> dataList; protected Context context; protected int item_layoutId=0; protected HashMap<Integer,Integer> layoutIdMap; //多种itemView时用到。 第一个int对应type类型,第二个int对应 itemlayoutId /

android ExpandableListView

跟風遠走 提交于 2020-03-09 07:34:09
1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android " android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ExpandableListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/expandableListView" /> </LinearLayout> 2.BaseExpandableListAdapter public class MyListAdapter extends BaseExpandableListAdapter { Context context; List<String> groupList = new ArrayList<String>(); List<List<String>> childList = new ArrayList<List<String>>();

[Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

偶尔善良 提交于 2020-03-09 06:11:34
Android ViewPager 中加载 Fragmenet的两种方式 一、当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one.xml + view_two.xml 自定义Adapter类: MyPagerAdapter1.java (继承自 PagerAdapter 类) Activity 布局文件: activity_test_vp1.xml Activity Java文件: MainActivity.java 本文以2个Page为例,来展现实现代码 1)xml布局文件 view_one.xml (view_two.xml类似) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFBA55" android:gravity="center" android:orientation="vertical"> <TextView android

安卓自定义view

萝らか妹 提交于 2020-03-08 18:34:31
1.什么是view? view就是屏幕上一个界面ui显示的基础对象。安卓的界面显示都是文字,图片一层层组合或者叠加展示出来的,就好比我们在用word编辑一样,在原来的空白的编辑板上放置的一个文字,一张图片,一个表格等排版组合一样。这里一个文字,一张图片,一个表格都可以类比一个view。 2.view属性 我们在显示word文档上的文字以及图片,以及表格等等都可以设置他们大小,颜色等格式或者其他更炫的样式,在安卓同样view也可以设置他们的大小或者颜色等等格式,安卓统称这些格式或者样式为view的属性。view的属性如下表: 3.自定义view。 虽然安卓已经给我们提供了很丰富的view对象了,例如显示文字的TextView,显示图片的ImageView等。但是有时候我们显示些复杂的或者特别的文字图像显示的时候,就只能通过TextView跟ImageView组合来显示了,虽然说这样显示也没有问题,但是如果是通过多个TextView以及ImageView才能达到我们显示效果的话,那么的系统的开销也会大大加大。以为一般比较特别以及负责的显示我们可以通过继承view来绘画出自己想要的界面显示。这就是自定义view。 简单理解就是自定义view自己想怎么显示就怎么显示。 4.重写显示方法 (1)重写onDraw,该方法主要是绘画内容,也就是想要显示的内容都会在这方法绘画 (2

关于Toast 详解

99封情书 提交于 2020-03-08 16:57:03
Toast用于向用户显示一些帮助或提示,有三种展现形式: • 文本类型 • 图片类型 • 复合类型 6.2.1 文本类型 下面看看一个文本类型Toast的例子,如图6-13所示,点击按钮会在屏幕的中下部分出现一个气泡,过一会又会消失了。 图 6-13图文本类型Toast 实现方式请参考代码清单6-10: 【代码清单6-10】 chapter6_6/src/com/work/Toast_1.java public class Toast_1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn01 = (Button) findViewById(R.id.Button01); btn01.setText(R.string.word); btn01.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(Toast_1.this, "你好我是Toast!", Toast.LENGTH

android 小知识

狂风中的少年 提交于 2020-03-08 00:15:17
1.Message 创建应该使用obtain()方法,而不应该使用 new 当我们调用Message.obtain()方法时,如果复用池中存在Message对象,我们就不会去创建一个新的Message对象。这样就避免了频繁创建和销毁Messgae对象的带来的性能开销。 2.在电脑上拦截模拟器请求 1.首先先设置号模拟器上的代理模式,WIFI里面有个修改网络,里面有个代理,打开后选择打开 代理服务器主机名填你使用的电脑IP地址,代理服务端口填你要监听的app连接后台的端口保存就好了 3.Android 下拉通知栏时Activity的生命周期 下拉通知栏对生命周期是没有什么影响的 4.Activity的四种启动模式launchMode的区别 standard standard模式是默认的启动模式,不用为配置android:launchMode属性即可,当然也可以指定值为standard。 singleTop 在上面的基础上为指定属性android:launchMode=“singleTop”,系统就会按照singleTop启动模式处理跳转行为。singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。 singleTask 在上面的基础上修改FActivity的属性android:launchMode=“singleTask”