UI

Velocity宏定义的坑与解决办法

白昼怎懂夜的黑 提交于 2019-12-06 03:00:12
使用Velocity,当然就免不了要使用宏,或者说 使用Velocity而 不使用其宏,就相当于废了Velocity一半以上的武功,非常可惜的。 怎么使用Velocity的宏呢,才最大程度的发挥其作用但是又避免掉入其中的坑呢?且听悠然乱弹乱弹: 官方文档中,关于Macro是这么说的: #macro - Allows users to define a Velocimacro (VM), a repeated segment of a VTL template, as required Format: # [ { ] macro [ } ] ( vmname $arg1 [ $arg2 $arg3 ... $argn ] ) [ VM VTL code... ] # [ { ] #end [ } ] vmname - Name used to call the VM ( #vmname ) $arg1 $arg2 [ ... ] - Arguments to the VM. There can be any number of arguments, but the number used at invocation must match the number specified in the definition. [ VM VTL code... ] - Any valid VTL

Android UI 之WaterFall瀑布流效果 [复制链接]

不打扰是莪最后的温柔 提交于 2019-12-06 01:59:33
所谓瀑布流效果,简单说就是宽度相同但是高度不同的一大堆图片,分成几列,然后像水流一样向下排列,并随着用户的上下滑动自动加载更多的图片内容。 语言描述比较抽象,具体效果看下面的截图: 其实这个效果在web上应用的还蛮多的,在android上也有一些应用有用到。因为看起来参差不齐,所以比较有新鲜感,不像传统的九宫格那样千篇一律。 网络上相关的文章也有几篇,但是整理后发现要么忽略了OOM的处理,要么代码的逻辑相对来说有一点混乱,滑动效果也有一点卡顿。 所以后来自己干脆换了一下思路,重新实现了这样一个瀑布流效果。目前做的测试不多,但是加载几千张图片还没有出现过OOM的情况,滑动也比较流畅。 下面大体讲解一下实现思路。 要想比较好的实现这个效果主要有两个重点: 一是在用户滑动到底部的时候加载下一组图片内容的处理。 二是当加载图片比较多的情况下,对图片进行回收,防止OOM的处理。 对于第一点,主要是加载时机的判断以及加载内容的异步处理。这一部分其实理解起来还是比较容易,具体可以参见下面给出的源码。 对于第二点,在进行回收的时候,我们的整体思路是以用户当前看到的这一个屏幕为基准,向上两屏以及向下两屏一共有5屏的内容,超出这5屏范围的bitmap将被回收。 在向上滚动的时候,将回收超过下方两屏范围的bitmap,并重载进入上方两屏的bitmap。 在向下滚动的时候

android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》

徘徊边缘 提交于 2019-12-06 00:54:32
看世界杯的空闲 时间 ,翻译一下 官方 文档。分辨率 问题 是大家都很关心的(720×480会不会悲剧),而关于这个问题,android官方的文档无疑最有说服力。由于不是所有的人都愿意去读英文,所以趁球赛没开始,翻译一些。 原文地址: http://developer.android.com/guide/practices/screens_support.html ————————下面是翻译—————————我是分割线—————————        多分辨率支持   在设计之初, Android 系统 就被设计为一个可以在多种不同分辨率的设备上运行的操作系统。对于应用程序来说,系统平台向它们提供的是一个稳定的,跨平台的运行环境,而关于如何将程序以正确的方式显示到它所运行的平台上所需要的大部分技术细节,都由系统本身进行了处理,无需程序的干预。当然,系统本身也为程序提供了一系列API,所以在目标平台的分辨率是可以完全确定的情况下,程序也可以精确的控制自身在目标平台上的 界面 显示方式。   这个文档会说明系统平台究竟提供了哪些分辨率支持特性,与它们如何在程序中使用的信息。如果你遵循文档中列出的方法,就很容易让你的程序在所有支持的分辨率下都能完美显示。这样你就可以用一个单独的.apk 文件 ,将你的程序发布到所有的平台上。   如果你已经发布过针对Android 1

01-UI基础-04-00-UIScrollView

若如初见. 提交于 2019-12-05 19:34:30
##继承关系 ##1、 基本概念 ###1.1 什么是UIScrollView 移动设备的屏幕大小是有限的,现在直接展示用户眼前的内容也相当有限 砀山是的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以为的内容 普通的UIView是不具备滚动功能,不能显示过多内容 UIScrollView是一个能滚动的可视化控件,可以用来展示内容,并且用来展示大量的内容,并且可以通过滚动查看所有内容 举例:手机上的“设置” ###1.2 UIScrollView的基本使用 将需要展示的内容添加到UIScrollView中 设置UIScrollView的contentSize属性,告诉UIScrollView所有内容的尺寸,也就是告诉他滚动范围 ###1.3 无法滚动的解决办法 没有设置contentSize属性 scrollEnabled = NO 没有接收到触发事件:userInteractionEnabled = NO 没有取消autolayout功能 ##2、 UIScrollView代理(delegate) ###2.1 基本常识 很多时候,我们想在UIScrollView滚动到某个位置或者停止滚动的时候做一写特定的操作。 要想完成上面的功能,前提条件就是实施监听到UiScrollView的整个滚动过程 当UiScrollView发生一些列的滚动操作时,会自动通知它的代理

几种开发UI界面的方式demo Android

放肆的年华 提交于 2019-12-05 02:35:48
下面用demo说明: 1.######## 用编程的方式开发UI界面 2014年5月13日 上午6:07 ################## /* 用编程的方式开发UI界面 */ // 创建一个线性布局管理器 LinearLayout layout = new LinearLayout(this); // 设置Activity显示layout super.setContentView(layout); // 设置layout中的控件垂直排列 layout.setOrientation(LinearLayout.VERTICAL); // 创建一个TextView final TextView tvShow = new TextView(this); // 创建一个按钮 Button btn = new Button(this); btn.setText(R.string.ok); btn.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); // 向layout中添加TextView layout.addView(tvShow); // 向layout中添加按钮 layout.addView

Android UI源码解析

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-04 01:18:34
首先我们从activity中的oncreate中的setContentView()方法介绍: 在Window 抽象类中有三个setContentView的方法,Window类有是Activity的成员属性 PhoneWindow继承了Window 实现了setContentView方法, 在PhoneWindow类中还有内部类DecorView DecorView继承了Framelayout 是一个具体现实View容器。 在PhoneWindow中实现setContentView具体方法: (layoutResID) { (== ) { installDecor()} (!hasFeature()) { .removeAllViews()} (hasFeature()) { Scene newScene = Scene.(layoutResIDgetContext())transitionTo(newScene)} { .inflate(layoutResID)} Callback cb = getCallback()(cb != && !isDestroyed()) { cb.onContentChanged()} } 首先判断了mContentparent 是否为空,这个就是xml文件的根节点 mLayoutInflater.inflate(layoutResID,

Tiny快速入门之Web界面快速开发实践

╄→гoц情女王★ 提交于 2019-12-03 17:48:49
前面讲了基于Tiny做 服务 ,这篇来讲讲用Tiny怎么做界面。f 下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的): https://git.oschina.net/tinyframework/tiny 问题报告: https://git.oschina.net/tinyframework/tiny/issues 官方网站: http://www.tinygroup.org 更多内容,请看本人博客,不一样的内容,一样的精彩! 本来想改改OSChina的界面,但是研究了一下,OSChina界面实在是高大上呀,不是做不出来,只是工作量比较大,因此还是做个简单的网站来展示一下用Tiny开发界面的过程,同时在展示过程的同时,会把相关的知识做一个充分的介绍 。 一、寻找网站模板 要做网站,不能没有模板,自己不会做网页设计,咋办?问谷歌找百度呗,找了一阵,看到下面这个模板不错,就它了。 http://www.tooplate.com/zip_files/2042_the_block.zip 相仔细了解这篇文章的同学,建议把原板的下载下来,对比着看,会更有感觉。 二、开工制作 1.编写default.layout布局文件 位置:/default.layout <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/

Android BaseAadapter 异步加载图片方法

一世执手 提交于 2019-12-03 12:54:19
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter, 1、Adapter类简介 1)、Adapter相关类结构如下图所示: 自定义Adapter子类,就需要实现上面几个方法,其中最重要的是getView()方法,它是将获取数据后的View组件返回,如ListView中每一行里的TextView、Gallery中的每个ImageView。 2)、Adapter在Android应用程序中起着非常重要的作用,应用也非常广泛,它可看作是数据源和UI组件之间的桥梁,其中Adapter、数据和UI之间的关系,可以用下图表示: 3)、常用子类 2、BaseAdapter简介 BaseAdapter是实现了ListAdapter和SpinnerAdapter两个接口,当然它也可以直接给ListView和Spinner等UI组件直接提供数据。 相关类结构如下图所示: 3、示例 示例一:Gallery显示一组图片 运行结果: 说明:上面一行图片是Gallery画廊,每次点击一个Gallery图片时,会同时在下面以大图形式显示出来该图片 布局文件: <? xml version="1.0" encoding="utf-8" ?> <

[Android]滑动刷新ListView——android-pulltorefresh使用方法解析

狂风中的少年 提交于 2019-12-03 10:30:51
现在很多android应用程序,比如新浪微博,在联网刷新内容时,都有一个滑动刷新的ListView,用户将内容下滑,就会有新的结果呈现。如下图所示: 上图中的功能是一个开源的项目android-pulltorefresh来实现的,我们可以利用这个项目来完成这个功能。 这个项目的源码托管在github上,地址为: https://github.com/johannilsson/android-pulltorefresh 下面来介绍如何使用: 滑动刷新其实就用到一个类PullToRefreshListView,它是ListView的子类,相应用到的layout文件为 pull_to_refresh_header.xml。 也就是说要用滑动刷新,需要将上面的类和xml及一些图片下载下来放到自己的工程中调用。 我们在用到这个类的activity的layout中加上如下代码: <!-- The PullToRefreshListView replaces a standard ListView widget. --> <com.markupartist.android.widget.PullToRefreshListView android:id="@+id/android:list" android:layout_height="fill_parent" android:layout

【干货】界面控件DevExtreme视频教程大汇总!

安稳与你 提交于 2019-12-03 07:07:59
DevExtreme是一款为移动开发者精心准备的,跨平台开发的HTML5/JS框架,可以构建iOS、Android、Tizen和Windows Phone 8应用程序,是Visual Studio开发人员开发跨平台移动产品的优选工具。本文将为您汇总DevExtreme相关的视频教程,以便您学习与使用DevExtreme。 DevExpress DevExtreme 001 DevExpress DevExtreme入门视频一: Getting Started 002 DevExpress DevExtreme入门视频二: 创建跨平台应用程序 003 DevExpress DevExtreme入门视频三: 测试应用程序 004 DevExpress DevExtreme入门视频四: 部署应用程序到Windows Phone 8 005 DevExpress DevExtreme入门视频五: 部署应用程序到Android 006 DevExpress DevExtreme入门视频六: 部署应用程序到iOS DevExtreme PhoneJS 001 DevExtreme PhoneJS入门视频一: Getting Started 002 DevExtreme PhoneJS入门视频二: 部署dxPivot组件 003 DevExtreme PhoneJS入门视频三: 本地化应用程序