应用界面设计
什么是MVC啊?
MVC(Model/View/Controller)模式是国外用得比较多的一种设计模式,好象最早是在Smaltalk中出现。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。 模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。 1、模型(Model) 模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑. 2、视图(View) 视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。 3、控制器(controller) 控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。 MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性 早期的程序中,如果不注意对数功能和显示的解耦合,常常会导致程序的复杂及难以维护。很多VB,Delphi等RAD程序都有这种问题。甚至现在的C#,Java有时候也会出现把业务逻辑写在显示模块中的现象 管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。主要原因:一是在早期的Web项目的开发中,程序语言和HTML的分离一直难以实现。CGI程序以字符串输出的形式动态地生成HTML内容。后来随着脚本语言的出现,前面的方式又被倒了过来,改成将脚本语言书写的程序嵌入在HTML内容中。这两种方式有一个相同的不足之处即它们总是无法将程序语言和HTML分离。二是脚本语言的功能相对较弱,缺乏支持MVC设计模式的一些必要的技术基础。直到基于J2EE的JSP Model 2问世时才得以改观。它用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能 JSP Model 1 与 JSP Model 2 SUN在JSP出现早期制定了两种规范,称为Model1和Model2。虽然Model2在一定程度上实现了MVC,但是它的应用用并不尽如人意 JSP Model 1 JSP Model 2 model2 容易使系统出现多个Controller,并且对页面导航的处理比较复杂 有些人觉得model2仍不够好,于是Craig R. McClanahan 2000年5月提交了一个WEB framework给Java Community.这就是后来的Struts. 2001年7月,Struts1.0,正式发布。该项目也成为了Apache Jakarta的子项目之一 Struts 质上就是在Model2的基础上实现的一个MVC架构。它只有一个中心控制器,他采用XML定制转向的URL。采用Action来处理逻辑
用什么软件做电子简历
电子简历可以用ppt,word,excel等软件制作。1)用excel制作简历的较少,内容简洁清晰,适合财务工作者使用;2)用word制作简历是较普遍的,word可以在排版,配色都可以按照个人喜好制作,建立内容也可以按照类别更清晰的展示;3)用PPT制作简历可以突出个人创意,展现PPT技巧,对于一些市场策划类,高端销售推广类人才可以用PPT更加直观的展现自己。选择哪个软件制作PPT均可以,重要的是要内容清晰,排版整齐,让hr能够很快抓住需要了解的信息。
用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注
所有功能均已实现,如有不满意的地方我再修改import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;public class Login extends JPanel{ //声明各个控件 private JLabel user_name_label = null; private JLabel password_label = null; private JTextField user_name_text = null; private JTextField password_text = null; private JButton login = null; private JButton regist = null; //声明文件用以保存注册信息 private final String file_name = "注册.txt"; public Login() { //获得各个控件并且为之设置显示文本 user_name_label = new JLabel(); user_name_label.setText("姓名:"); password_label = new JLabel(); password_label.setText("密码:"); user_name_text = new JTextField(); password_text = new JTextField(); login = new JButton(); login.setText("登录"); regist = new JButton(); regist.setText("注册"); //设置面板的布局为网格布局 setLayout(new GridLayout(3,2)); //将控件添加到面板里 add(user_name_label); add(user_name_text); add(password_label); add(password_text); add(login); add(regist); //为两个按钮添加监听 regist.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String name = user_name_text.getText().toString(); String password = password_text.getText().toString(); String str = null; String[] result = null; try { if((name.length() == 0)&&(password.length() == 0)) { int a = JOptionPane.showConfirmDialog(null,"请输入用户名和密码","确认对话框",JOptionPane.YES_NO_OPTION); throw new Exception(""); } else if(name.length() == 0) { int a = JOptionPane.showConfirmDialog(null,"请输入用户名","确认对话框",JOptionPane.YES_NO_OPTION); } else if(password.length() == 0) { int a = JOptionPane.showConfirmDialog(null,"请输入密码","确认对话框",JOptionPane.YES_NO_OPTION); } InputStream in = new FileInputStream(file_name); InputStreamReader reader = new InputStreamReader(in); BufferedReader buffered_reader = new BufferedReader(reader); while((str = buffered_reader.readLine()) != null) { result = str.split(" "); if(result[0].equals(name)) { int a = JOptionPane.showConfirmDialog(null,"该用户已存在,请重新注册","确认对话框",JOptionPane.YES_NO_OPTION); throw new Exception(""); } } OutputStream out = new FileOutputStream(file_name,true); OutputStreamWriter writer = new OutputStreamWriter(out); BufferedWriter buffered_writer = new BufferedWriter(writer); buffered_writer.write(name+" "+password); buffered_writer.newLine(); buffered_writer.close(); int a = JOptionPane.showConfirmDialog(null,"恭喜你,注册成功!","确认对话框",JOptionPane.YES_NO_OPTION); } catch(Exception e1) { } } }); login.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String name = user_name_text.getText().toString(); String password = password_text.getText().toString(); String result = null; try { if((name.length() == 0)&&(password.length() == 0)) { int a = JOptionPane.showConfirmDialog(null,"请输入用户名和密码","确认对话框",JOptionPane.YES_NO_OPTION); throw new Exception(""); } else if(name.length() == 0) { int a = JOptionPane.showConfirmDialog(null,"请输入用户名","确认对话框",JOptionPane.YES_NO_OPTION); } else if(password.length() == 0) { int a = JOptionPane.showConfirmDialog(null,"请输入密码","确认对话框",JOptionPane.YES_NO_OPTION); } InputStream in = new FileInputStream(file_name); InputStreamReader reader = new InputStreamReader(in); BufferedReader buffered_reader = new BufferedReader(reader); while((result = buffered_reader.readLine()) != null) { if(result.equals(name+" "+password)) { int a = JOptionPane.showConfirmDialog(null,"登陆成功","确认对话框",JOptionPane.YES_NO_OPTION); break; } } if(!(result.equals(name+" "+password))) { int a = JOptionPane.showConfirmDialog(null,"用户名或密码错误","确认对话框",JOptionPane.YES_NO_OPTION); } } catch(Exception e1) { //e1.printStackTrace(); } } }); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(500,500); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new Login(),BorderLayout.NORTH); }}
如何说一个手机app的设计理念
app应用发给谁用写给孩玩游戏用理财记账类应用每应用都固定适用群决定应用内容决定要给使用者用户体验2app应用做? app明确使用目必须何明确办要想清楚能吸引用户使用app3app能解决问题?app应该致力于解决问题想能处理相关问题要考虑发几同app每app都应该专注解决类问题END设计用户界面1明确理念构想面该设计用户界面用户界面app使用者与app交互应该遵循简洁美观便捷原则app使用者角度发带给用户良使用体验END定义交互式1用户界面交互才变起app发交互启用都通用户操作事件触发比手指点击滑捏合等操作通定义些事件我精确用户操作给响应或者打新界面或者提供展现内容前界面END部署用户行定义交互式接要通代码实现些定义行说用户所操作都通我实现定义响应没前面明确定义给用户带困扰app所能现错误END数据交互部署1设计用户界面交互式接要考虑数据存储问题界面与数据间必须要定义明确交互式尽管使用app直接些数据交互数据模型app坚实基础使app更扩展性更易于修改何说手机app设计理念
苹果和安卓在界面设计上有什么区别?要注意什么
设计上来说这两个系统有些东西越来越通用了,目前很多Android的应用偏苹果风格,也就是说基本都是采用一套iOS设计模板来适配Android系统。术语解读和系统平台对比android是Google公司开发的操作系统。iOS是苹果公司的移动操作系统。导航方式不一样iOS的Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的。还有新闻类的应用。Android一般放在页面顶端,可以通过滑动页面来切换Tab,当然Tab可以点击切换,Tab多的话,Tab本身也可以滑动。比如豌豆荚,百度贴吧,QQ。总之,Android啥都可以有。UI设计规范不一样比如现在通常设计的尺寸对比如下:iOS: 750*1334 或者 1242*2208android:720*1280 或者 1080*1920单条item的操作iOS单条item的操作有两种,点击和滑动,点击一般进入一个新的页面,滑动会出现对这条item的一些常用操作,如微信里滑动一条对话,会出现标记未读和删除。Android中,单条item的操作也有两种,点击和长按,点击一般进入一个新的页面。长按进入一个编辑模式,可以在里面进行批量和其他一个操作,比如删除,顶置等等。比如小米的短信页面;长按也可以弹出情境操作栏dialog,进行操作,比如Android版的微信。例外的是,Android里面也可以有单条item的滑动,如新版QQ,这种比较少见。AndroidL的短信,可以滑动进行归档。大Android啥都可以有。实体键iOS只有一个实体键(音量,电源不算哈),home键,这个键有这么几个功能:1、按一次,回到桌面。2 、双击,出现多任务界面3、iOS8里面,轻触两下Home键,调出单手模式4 、指纹解锁Android有四个实体键(现在很多被屏幕上的虚拟键代替,但功效是一样的)4.4一下的分别是back键,home键,menu键,和搜索键。4.4及以上,是back键,home键,多任务键。Android原生是这样,经过优化的Android就不一定了,比如魅族的smart bar,根据当前页面情景变化,不过蛮好用。Android的back键,在大部分情况下,和页面上的返回功效一样。不过,Android的back键可以在应用件切换,还可以返回主屏幕。这个iOS里面的键不能在应用间直接切换。浮窗设计元素不一样Android里可以看到各种浮窗,流量,清理内存等等。iOS暂时还不支持这样的浮窗。越狱的貌似可以。iOS和Android的UI区别七:图标尺寸和命名规范不一样1、iOS和Android手机的APP图标尺寸规范和图标命名规范2、对比PC、iOS、Android等终端APP的交互设计的差异化
vs中c#在哪里打开设计窗口
打VS按快捷键Ctrl+Shift+N选择需要创建项目类型使用.NET版本说设计窗口指属性栏指窗体设计界面需要创建Form应用程序解决案资源管理器双击窗体文件自窗体文件我记应该叫Form1.cs
C语言开发的软件界面怎么设计的啊?
用C/C++直接开发界面程序一般有以下几种方式:1、直接调用系统api这一种比较麻烦而且开发的效率不高,但通过练习可以让你很好的掌握GUI程序的原理和技巧。因为常用的第3种也是以此为基础的,学会api有利于更加深入的了解GUI程序原理。2、直接使用绘图接口自己画这种最麻烦而且一般适用于游戏、虚拟现实等专业领域,比如使用OpenGl绘图接口制作3D程序。3、调用其他封装好库这一种就是别人把系统api封装好了,给了你一个简单的使用接口,比如MFC。对于C/C++来说,现在比较流行的有Qt,xwidget等GUI库,使用简单,文档丰富,而且跨平台使用,是目前比较好的选择。如果以前没有用过MFC,建议还是别学MFC了,繁琐而且不是跨平台的。还有,如果用VS开发,.NET里面的一些标准控件也足以应付日常开发了,这个其实是现在用的最普遍的。
android应用开发:第一次打开app时是登陆页,登陆之后每次打开都直接进入主页面,如何设计app的页面关系
1.可以用SharedPreferences记录登陆状态...2.主页面和登陆页面可以使用同一个Activity,但使用不同的布局文件,例如main.xml和login.xml3.在第一个Activity启动时,在onCreate方法中,先获取SharedPreference中的登陆状态,假设是Boolean型的isLogin1234567891011if(isLogin){ setContenView(R.layout.main); ... ... ...}else{ setContenView(R.layout.login); ... ... ...}欢迎~望采纳~按照你的想法做了,但是登陆后如何跳转回主页,主页layout都没有启动....
登陆后,先改变登陆状态,然后调用setContenView(R.layout.main);,接下来的操作就跟以前一样啦...layout是不用启动的,只需要在适当的时候在Activity中更换布局就行了,用setContentView函数
PC端UI设计尺寸规范?
对于刚入行的UI设计师,最容易犯的错就是在设计移动APP时,不懂什么尺寸或者用哪种屏幕的尺寸是最适当的?为了解决这个问题,今天我们就简单的为大家整理做UI时最基础的尺寸规范。现象首先说现象,大家都知道移动端设备屏幕尺寸非常多,碎片化严重。尤其是Android,你会听到很多种分辨率:480×800, 480×854, 540×960, 720×1280, 1080×1920,而且还有传说中的2K屏。近年来iPhone的碎片化也加剧了:640×960, 640×1136, 750×1334, 1242×2208。不要被这些尺寸吓倒。实际上大部分的app UI设计和移动端网页,在各种尺寸的屏幕上都能正常显示。说明尺寸的问题一定有解决方法,而且有规律可循。像素密度要知道,屏幕是由很多像素点组成的。之前提到那么多种分辨率,都是手机屏幕的实际像素尺寸。比如480×800的屏幕,就是由800行、480列的像素点组成的。每个点发出不同颜色的光,构成我们所看到的画面。而手机屏幕的物理尺寸,和像素尺寸是不成比例的。最典型的例子,iPhone 3gs的屏幕像素是320×480,iPhone 4s的屏幕像素是640×960。刚好两倍,然而两款手机都是3.5英寸的。所以,我们要引入最重要的一个概念:像素密度,也就是PPI(pixels per inch)。这项指标是连接数字世界与物理世界的桥梁。Pixels per inch,准确的说是每英寸的长度上排列的像素点数量。1英寸是一个固定长度,等于2.54厘米,大约是食指最末端那根指节的长度。像素密度越高,代表屏幕显示效果越精细。Retina屏比普通屏清晰很多,就是因为它的像素密度翻了一倍。倍率与逻辑像素再用iPhone 3gs和4s来举例。假设有个邮件列表界面,我们不妨按照PC端网页设计的思维来想象。3gs上大概只能显示4-5行,4s就能显示9-10行,而且每行会变得特别宽。但两款手机其实是一样大的。如果照这种方式显示,3gs上刚刚好的效果,在4s上就会小到根本看不清字。在现实中,这两者效果却是一样的。这是因为Retina屏幕把2×2个像素当1个像素使用。比如原本44像素高的顶部导航栏,在Retina屏上用了88个像素的高度来显示。导致界面元素都变成2倍大小,反而和3gs效果一样了。画质却更清晰。在以前,iOS应用的资源图片中,同一张图通常有两个尺寸。你会看到文件名有的带@2x字样,有的不带。其中不带@2x的用在普通屏上,带@2x的用在Retina屏上。只要图片准备好,iOS会自己判断用哪张,Android道理也一样。由此可以看出,苹果以普通屏为基准,给Retina屏定义了一个2倍的倍率(iPhone 6plus除外,它达到了3倍)。实际像素除以倍率,就得到逻辑像素尺寸。只要两个屏幕逻辑像素相同,它们的显示效果就是相同的。Android的解决方法类似,但更复杂一些。因为Android屏幕尺寸实在太多,分辨率高低跨度非常大,不像苹果只有那么几款固定设备、固定尺寸。所以Android把各种设备的像素密度划成了好几个范围区间,给不同范围的设备定义了不同的倍率,来保证显示效果相近。像素密度概念虽然重要,但用不着我们自己算,iOS与Android都帮我们算好了。如图所示,像素密度在120左右的屏幕归为ldpi,160左右的归为mdpi,以此类推。这样,所有的Android屏幕都找到了自己的位置,并赋予了相应的倍率:ldpi [0.75倍]mdpi [1倍]hdpi [1.5倍]xhdpi [2倍]xxhdpi [3倍]xxxhdpi [4倍]各型号iPhone的倍率比较简单,我们后面会讲到。那么Android手机那么多,具体怎么分?哪些手机是几倍的倍率呢?我们先看一张表,这是友盟2014年10月到2015年03月的数据:就目前市场状况而言,各种手机的分辨率可以这样粗略判断。虽然不全面,但至少在1年内都还有一定的参考意义:ldpi 如今已绝迹,不用考虑mdpi [320x480](市场份额不足5%,新手机不会有这种倍率,屏幕通常都特别小)hdpi [480x800、480x854、540x960](早年的低端机,屏幕在3.5英寸档位;如今的低端机,屏幕在4.7-5.0英寸档位)xhdpi [720x1280](早年的中端机,屏幕在4.7-5.0英寸档位;如今的中低端机,屏幕在5.0-5.5英寸档位)xxhdpi [1080x1920](早年的高端机,如今的中高端机,屏幕通常都在5.0英寸以上)xxxhdpi [1440x2560](极少数2K屏手机,比如Google Nexus 6)自然地,以1倍的mdpi作为基准。像素密度更高或者更低的设备,只需乘以相应的倍率,就能得到与基准倍率近似的显示效果。不过需要注意的是,Android设备的逻辑像素尺寸并不统一。比如两种常见的屏幕480×800和1080×1920,它们分别属于hdpi和xxhdpi。除以各自倍率1.5倍和3倍,得到逻辑像素为320×533和360×640。很显然,后者更宽更高,能显示内容。所以,即使有倍率的存在,各种Android设备的显示效果仍然无法做到完全一致。单位不难发现,真正决定显示效果的,是逻辑像素尺寸。为此,iOS和Android平台都定义了各自的逻辑像素单位。iOS的尺寸单位为pt,Android的尺寸单位为dp。说实话,两者其实是一回事。单位之间的换算关系随倍率变化:1倍:1pt=1dp=1px(mdpi、iPhone 3gs)1.5倍:1pt=1dp=1.5px(hdpi)2倍:1pt=1dp=2px(xhdpi、iPhone 4s/5/6)3倍:1pt=1dp=3px(xxhdpi、iPhone 6)4倍:1pt=1dp=4px(xxxhdpi)单位决定了我们的思考方式。在设计和开发过程中,应该尽量使用逻辑像素尺寸来思考界面。设计Android应用时,有的设计师喜欢把画布设为1080×1920,有的喜欢设成720×1280。给出的界面元素尺寸就不统一了。Android的最小点击区域尺寸是48x48dp,这就意味着在xhdpi的设备上,按钮尺寸至少是96x96px。而在xxhdpi设备上,则是144x144px。无论画布设成多大,我们设计的是基准倍率的界面样式,而且开发人员需要的单位都是逻辑像素。所以为了保证准确高效的沟通,双方都需要以逻辑像素尺寸来描述和理解界面,无论是在标注图还是在日常沟通中。不要再说“底部标签栏的高度是96像素,我是按照xhdpi做的”这样的话了。Web怎么办移动端页面的绝对单位仍然是px,至少代码里这么写,但它的道理也和app一样。由于像素密度是设备本身的固有属性,它会影响到设备中的所有应用,包括浏览器。前端技术可以善加利用设备的像素密度,只需一行代码,浏览器便会使用app的显示方式来渲染页面。根据像素密度,按相应倍率缩放。以iPhone 5s为例,屏幕的分辨率是640×1136,倍率是2。浏览器会认为屏幕的分辨率是320×568,仍然是基准倍率的尺寸。所以在制作页面时,只需要按照基准倍率来就行了。无论什么样的屏幕,倍率是多少,都按逻辑像素尺寸来设计和开发页面。只不过在准备资源图的时候,需要准备2倍大小的图,通过代码把它缩成1倍大小显示,才能保证清晰。实际应用大家最关心的还是实际运用,画布该怎么设置。我们就iOS、Android、Web三个平台来分别梳理一下。不过在这之前,我要为使用PS进行设计的朋友介绍一个小技巧。之前我说过,我们要以逻辑像素尺寸来思考界面。体现到设计过程中,就是要把单位设置成逻辑像素。打开PS的首选项——单位与标尺界面,把尺寸和文字单位都改成点(Point)。这里的点也就是pt,无论设计iOS、Android还是Web应用,单位都用它。当然,各平台单位名称还是要记住的。这里我们用的只是它的原理,不用在意名称。要调节倍率,则通过图像大小里的DPI来控制。这个DPI,其实就是PPI,像素密度。有个常识大家都知道,屏幕上的设计DPI设成72,印刷品设计DPI设成300。为什么是这两个数字?首先说300,这和人眼的分辨能力有关。由于1英寸是固定长度,每1英寸有多少个像素点决定了画质清晰程度。之前说过,这就是像素密度,也就是DPI。DPI达到300以上,其细腻程度就会给人真实感,像真实世界中的物件。相反,DPI只有10的话,在你一个食指指节大小的长度内只有10个像素,这明显就是马赛克了。所以印刷品要设成300,才能保证清晰。再说72,这有一定的历史原因。最早的图形设计是在mac电脑上进行的,mac本身的显示器分辨率就是72。PS中把图像DPI也设成72,就能保证屏幕上显示的尺寸和打印尺寸相同,便于设计。72的PC显示器分辨率逐渐成为一种默认的行业标准,这套规则就这么沿用下来。现在回到正题,我们怎么通过DPI来调节倍率?既然屏幕本身的分辨率是72,DPI设成72刚好是1倍尺寸,那设成72的两倍就是倍率为2的屏幕了,就这么简单。下面来看看3个平台各自的画布设置:IPhoneiPhone的屏幕尺寸各不相同,我说的是逻辑像素尺寸,这确实是让人很头疼的事情。如果想用一套设计涵盖所有iPhone,就要选择逻辑像素折中的机型。从市场占有率数据来看,目前最多的是iPhone5/5s的屏幕。倍率为2,逻辑像素320×568。上升势头最猛,未来有望登上第一的是iPhone 6的屏幕。倍率为2,逻辑像素375×667。按照这两种尺寸来设计,都是比较主流的做法。可以兼顾短一些的iPhone 4s,大一点的6 plus也不会过于空旷。不过在切图的时候要注意,由于iPhone 6 plus的3倍图是由2倍图放大而来,所以位图要注意保证清晰。Android都说Android碎片化严重,但它现在反而比iOS好处理。因为如今的Android屏幕逻辑像素已经趋于统一了:360×640,就看你设成几倍了。想以xhdpi为准,就把DPI设成72×2=144。想以xxhdpi为准,就把DPI设成72×3=216。对于那些比较老的低端机,宽度是480px的那批,画面确实会小一些,显示内容会更少。稍微留意一下,重要内容尽量保持在界面中上部分。当然,这些机型不出一年就会被边缘化,基本淘汰。现在能运转的也是当作功能机在用,软件多了必卡无疑,用户体验无从谈起。不作考虑也是OK的。Web手机端网页就没有统一标准了,比较流行的做法是按照iPhone 5的尺寸来设计。倍率2,逻辑像素320×568。这样的做法比较实在,倍率2的屏幕无论在iOS还是Android方面都是主流,而且又是2倍屏幕中逻辑像素最小的。所以图片的尺寸可以保持在较小的水平,页面加载速度快。当然,缺点就是在倍率3的设备上看,图片不是特别清晰。如果追求图片质量,愿意牺牲加载速度,那么可以按照最大的屏幕来设计。也就是iPhone 6 plus的尺寸,倍率3,逻辑像素414×736。总结移动端的尺寸比PC端复杂,关键就在倍率。但也正因为倍率的存在,把大大小小的屏幕拉回到同一水平线,得以保证一套设计适应各种屏幕。站在这条水平线的角度看,会发现它很好理解。