帧布局为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一 帧)。...XML属性 相关方法 说明 android:foreground setForeground(Drawable) 设置该帧布局容器的前景图像 android:foregroundGravity setForegroundGravity...同样使用WidgetSample工程,继续使用app/main/res/layout/目录下的activity_main.xml文件,在其中填充如下代码片段: 上面的界面布局定义使用FrameLayout布局,并向该布局容器中添加了 5个TextView...,这5个TextView的高度、宽度则逐渐减少——这样可以保证最先添加的 TextView不会被完全遮挡;而且我们设置了 5个TextView 的背景色渐变。
现在ActionBar广泛用做APP的顶部导航栏,它在布局上主要分为三部分:左边是返回区域,包括logo、返回箭头、左侧标题等等;右边是菜单区域,放的是溢出菜单OverflowMenu的各菜单项;中间是条件区域...ActionBar其上各控件的开关设置说明如下: setDisplayUseLogoEnabled : 是否在左侧返回区域显示logo,默认显示 setDisplayHomeAsUpEnabled...: 是否在左侧返回区域显示返回箭头,默认不显示 setDisplayShowTitleEnabled : 是否在左侧返回区域显示左侧标题,默认显示APP名称 setTitle : 设置左侧标题的文本...setBackgroundDrawable : 设置ActionBar的背景图像 setDisplayShowCustomEnabled : 是否在中间条件区域显示定制视图 setNavigationMode...所以要想在菜单列表中显示左侧图标,需要调用MenuBuilder的setOptionalIconsVisible方法(MenuBuilder在Android内核中,未开放出来,只能通过反射机制来调用)。
不设置按键监听,在红色区域点击一下,顺序说出调用了哪个控件的哪个事件分发相关方法? ?...细节建议读者实操一遍,我直接说结果了: ① DOWN 事件:TextView 和 FrameLayout 未消费DOWN事件,会继续向上回传到 DecorView,调用 DecorView 的 onTouchEvent...FrameLayout 和 TextView 均设置按键监听,要求在红色和蓝色区域任意位置点击,只由 FrameLayout 的按键监听响应,怎么做? 这个简单,我来!...都设置按键监听,在红色区域按下,移动到蓝色区域抬起,谁的按键监听会响应? 这个问题,好像还真没想过... ?...答案都在源码里,我直接公布了: ① DOWN 和红色区域内的 MOVE 事件都由 TextView 消费。
特别说明,left和top边框中交叉部分是可拉伸部分,未选中部分是静态区域部分。...在Android中以9.PNG格式的图片未背景,则能够自定义拉伸而不失真,比如系统的Button就是一个典型的例子。...下图是未使用.9.PNG的对比图,而且也不是我们要的效果: ? 到这里为止,我们已经基本会制作.9.PNG图片了。为了知识体系的全面性和深入性,我们继续。...,因为设置内容区域就是确定padding,所以我在前面部分说他们是神似。...我个人认为通过内容区域设定padding比在布局xml中定义padding更优雅,更简洁!
include/merge 布局优化中常常用到include/merge标签,include的含义类似C代码中的include,意思是直接把指定布局片段包含进当前的布局文件。...include适用于多个布局文件中存在相同的xml片段,比如说相同的标题栏、相同的广告栏、相同的进度栏等等。...ViewStub 在一个页面上根据不同条件展示不同的控件,我们常常会设置控件的可视属性,比如调用指定控件的setVisibility方法,若需展示则设置View.VISIBLE,若需隐藏则设置View.GONE...从截图可以看到,windowFrame的覆盖区域包括窗口与边框,且窗口对内半透明、对外不透明,而边框对外半透明。...只有android:windowBackground设置为半透明红色的窗口截图 ? 从截图可以看到,windowBackground的覆盖区域只有窗口,且窗口对内对外都是半透明。
insideInset:该ScrollBar显示在padding区域里面,增加了控件的padding区域,该ScrollBar不会和视图的内容重叠。...insideOverlay:该ScrollBar显示在内容区域里面,不会增加了控件的padding区域,该ScrollBar以半透明的样式覆盖在视图(view)的内容上。...继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建scrollview_layout.xml文件,在其中填充如下代码片段...match_parent" android:layout_height="wrap_content" android:text="more" /> TextView...android:attr/textAppearanceLarge" /> TextView android:layout_width="wrap_content
前几天写了一个小工具,其中一个设置项需要屏幕区域范围坐标参数,由于通过观察直接填写坐标信息不太现实,于是就有了通过直接拖拽屏幕去取这个参数的需求,又因为需要在任意界面都能选取,所以就想到了悬浮窗,这里以前写过一个悬浮窗工具类...和直接继承 View 实现相比,它的优点就是可以在布局文件中方便的添加子 View,缺点是集成度不够高,需要引用外部资源,所以具体实现可以看使用场景,这里没有复用的场景,集成度要求不高,所以就选择了更简单的继承...="结束" ... /> TextView android:text="区域" ... /> </LinearLayout...= 0) { clear() } // 判断落点属于起始区域还是结束区域 if (startSelected) { end.x = rawX...return false } return true } /** * 判断 悬浮窗口权限是否打开 * 由于android未提供直接跳转到悬浮窗设置页的
您可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。...您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的...与 Activity 生命周期协调一致 片段所在 Activity 的生命周期会直接影响片段的生命周期,其表现为,Activity 的每次生命周期回调都会引发每个片段的类似回调。...result = bundle.getString("bundleKey"); // Do something with the result... } }); 另一个framgment设置结果...); }else{ // 复用旧对象 viewHolder = (ViewHolder)convertView.getTag(); } // 设置
例如:新闻应用可以使用一个片段在左侧显示文章列表,使用另一个片段在右侧显示文章—两个片段并排显示在一个 Activity 中,每个片段都具有自己的一套生命周期回调方法,并各自处理自己的用户输入事件。...也就是说,由于每个片段都会通过各自的生命周期回调来定义其自己的布局和行为,您可以将一个片段加入多个 Activity,因此,您应该采用可复用式设计,避免直接从某个片段直接操纵另一个片段。...例如,在手机上,如果不能在同一 Activity 内储存多个片段,可能必须利用单独片段来实现单窗格 UI。...对话框:DialogFragment 列表:ListFragment 选项设置:PreferenceFragment WebView界面:WebViewFragment 是用App包下的Fragment...Toast.LENGTH_SHORT).show(); } }); 总结 ->在Fragment定义一个接口,接口中定义抽象方法,你要传什么类型的数据参数就设置为什么类型
一、认识GridLayout 网格布局实现了控件的交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。...网格布局用一组无限细的直线将绘图区域分成行、列和单元,并指定控件的显示区域和控件在该区域的显示方式 下表显示了 GridLayout常用的XML属性及相关方法说明。...(int) 设置该网格的列数量 android:columnOrderPreserved setColumnOrderPreserved(boolean) 设置该网格容器知否保留列序号 android:...同样使用WidgetSample工程,继续使用app/main/res/layout/目录下的activity_main.xml文件,在其中填充如下代码片段: <?...layout_height="match_parent" android:columnCount="4" android:rowCount="7"> TextView
其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可。...实现 android:ellipsize="marquee" //设置超出显示区域的内容以跑马灯效果呈现,该值还可以设置成END, START等,就是我们常见的在末尾"..."显示。...看下TextView关于跑马灯启动的相关源码你就会更清楚 ?...而对于触屏手机来说,当触摸时,也就同时获取点击状态和焦点状态了,所以在触屏手机上,跑马灯更常见的应用场景则是,不管TextView有没有获取焦点,都让跑马灯效果一直处于启动状态,正如最上面动图里的第一个...代码如下: /** * 跑马灯效果的TextView, 使用方式: * 启动/关闭:{@link #setMarqueeEnable(boolean)} * xml文件中记得设置:android:
该控件在主界面中有一个例如以下图红色箭头所指的底部触发区域: 该区域点击的时候被隐藏在下方的内容将网上漂移到顶部,直到被隐藏的内容全然挡住原来的布局。可是这个触发区域仍然存在,如图。...当被隐藏区域全然显示。这时再次点击触发区域(或者是通过下滑的手势)将恢复到最初的状态。 一般再未点击的时候。这个触发区域显示一些被隐藏内容的简要信息。....layout必须设置gravity属性为top 或者bottom .确保SlidingUpPanelLayout有两个子view,一个是主界面。另外一个是向上滑动的界面。...android:gravity="center" android:text="Main Content" android:textSize="16sp" /> TextView...name="AppTheme"> true 同一时候这样的情况你须要为主区域的布局设置
一、ToggleButton ToggleButton(开关按钮)是Android系统中比较简单的一个组件,是一个具有选中和未选中双状态的按钮,并且需要为不同的状态设置不同的显示文本。...同样使用WidgetSample工程,在app/main/res/layout/目录下创建一个togglebutton_layout.xml文件,然后在其中填充如下代码片段: <?...android:layout_width="match_parent" android:layout_height="match_parent"> TextView...同样使用WidgetSample工程,在app/main/res/layout/目录下创建一个switch_layout.xml文件,然后在其中填充如下代码片段: <?...android:layout_width="match_parent" android:layout_height="match_parent"> TextView
advancedviewsample模块,首先准备5张图片放在drawable目录下,然后在app/main/res/layout/目录下创建imageswitcher_layout.xml文件,在其中填充如下代码片段...与ImageSwitcher相似的是,使用TextSwitcher也需要设置一个 ViewFactory。...TextSwitcher与TextView的功能有点相似,它们都可用于显示文本内容,区别在于TextSwitcher的效果更炫,它可以指定文本切换时的动画效果。...继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建textwitcher_layout.xml文件,在其中填充如下代码片段...接下来Activity只要为TextSwitcher设置ViewFactory,该TextSwitcher即可正常工作。
,给每个片段单独设置样式: Android中使用SpannableString实现 iOS中使用NSAttributedString来实现 Flutter也有类似概念TextSpan TextSpan定义一个字符串片段该如何控制其展示样式...分别定义黑色、红色两种展示样式,随后把一段字符串分成4个片段,并设置不同展示样式: TextStyle blackStyle = TextStyle(fontWeight: FontWeight.normal...', style:redStyle), //第1个片段,红色样式 TextSpan(text:'TextView', style: blackStyle) //第1个片段,黑色样式...,图片构造方法还提供: 填充模式fit 拉伸模式centerSlice 重复模式repeat等属性 可针对图片与目标区域的宽高比差异制定排版模式。...首先,认识支持单一样式和混合样式两种类型文本展示控件Text: 通过TextStyle控制字符串的展示样式,其他参数控制文本布局,实现单一样式文本展示 通过TextSpan将字符串分割为若干片段,对每个片段单独设置样式后组装
为什么设置android:maxLines="1"时TextView的跑马灯效果就不能正常工作? TextView里各种padding的含义?...在Android里不管是什么控件都是占据一个矩形的空间,各个矩形之间基本都可以设置padding属性,这样一来TextView就被分成多个矩形区域了,而TextView也提供了获取各种padding和长度的接口...最后用一张图总结一下,我把TextView分成内容区域,内容区域和TextView边界之间的间隔就是padding的值,内容区域包括drawable区域和文字区域,drawable区域和文字区域之间的间隔就是...A:看需求吧,我觉得通常情况下都是只需要计算显示在屏幕上的可见区域的每行文字的长度即可。还有那么一种需求,当设置了溢出内容用...表示时,那么其实每行文字的实际长度就不止可见区域那么长了。...singleLine: 强制设置TextView的文字不换行。
代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。 三、LinearLayout里有两个FrameLayout子元素。 (20)为标题栏显示界面。...只有一个TextView显示应用 ? 一、DecorView为整个Window界面的最顶层View。 二、DecorView只有一个子元素为LinearLayout。...只有一个TextView显示应用的名称。也可以自定义标题栏,载入后的自定义标题栏View将加入FrameLayout中。 (21)为内容栏显示界面。...下图为SDK中tools文件夹下hierarchyviewer bat 查看ViewTree的结果: (此时未替换标题栏) ? 2.替换标题栏后ViewTree的变化: ?...绿色区域发生了变化,改变为了载入的title.xml文件的布局。
SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。 SORT_STRING - 默认。把项目作为字符串来比较。...SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。...这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。 技术细节 返回值: 返回被过滤的数组。...PHP 版本: 4.0.1+ 更新日志: 在 PHP 5.2.10 中,sortingtype 的默认值改回 SORT_STRING。
开放的染色质区域比封闭的区域更容易断裂 序列在基因组中分布不均 允许我们在比对的控件中与相同区域进行比较 消除 ENCODE 的 Black list的影响 所以会准备空白对照,排除假阳性,对照组有有两种类型...: input DNA:不用任何抗体捕获的DNA; mock IP DNA:用不含有抗体的DNA 这样一来,就会让我们检测到的峰更明显更接近真实的生物学特征。...-Subhash Tripathi,ResearchGate 染色质片段 片段大小:影响ChIP-seq中的信噪比 因细胞类型而异 偏向启动子区域的片段会在ChIP 和对照样品中的启动子上引起...绿色框对应于基于SPP宽峰检测方法得到的显著富集区域。 在 5M (500 Reads) 中,未检测到突出显示的富集区域。 ? 同样,我们换成 H3K27me3 组蛋白修饰。...这时在3.5M和10M 的低深度处未检测到突出显示的HOXD11和HOXD-AS1基因座处的富集区域(蓝色框)。 ?
使用TextView,结合各种XxxLayout,基本上想在哪显示文字都可以。但当显示的文字需要频繁更新的时候,使用TextView可能就不是那么明智了。...看到需求,首先想到的自然是使用TextView来显示中间的数字,通过不断setText来更新文本显示。...然而,运行起来后发现TextView的更新有很严重的卡顿,打开TextView#onDraw方法,发现这个方法里做了很多事情,onDraw如此频繁地被调用,卡顿是自然的。...我们可以想到,既然已经知道文本区域左边沿,只要知道文本区域的宽度,左边向右平移半个宽度,就能得出中心点的x坐标。...扩展Paint#setTextAlign上述实例中,要找到文本区域中心点的x坐标,实际上还有更简单的实现方式,就是设置画笔的对齐方式为Paint.Align.Center。