本文实例讲述了Android编程常用技巧。分享给大家供大家参考,具体如下:

1. 登录的时候,如果输入有误,则输入框左右震动,表示输入有误

在res下准备一个anim文件夹,里面包含两个文件,main_login_shake.xml 和 main_login_cycle_7.xml,

其中,main_login_shake.xml如下:

xmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="0"

android:toXDelta="10"

android:duration="1000"

android:interpolator="@anim/main_login_cycle_7" />

上面文件中引用了main_login_cycle_7.xml,代码如下:

这两段代码的意思就是在1秒钟之类,x坐标从0到10晃动7次

看java代码:

shakeanim = AnimationUtils.loadAnimation(this,R.anim.main_login_shake);

btn_login.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

boolean ready = true;

String username=et_username.getText().toString();

String password=et_password.getText().toString();

if (!username.matches("^\\w{1,}+$")) {

ready = false;

et_username.startAnimation(shakeanim);

}

if (!password.matches("^\\w{1,}+$")) {

ready = false;

et_password.startAnimation(shakeanim);

}

if(selectClinic==null){

ready = false;

et_clinic.startAnimation(shakeanim);

}

if (ready) {

loginStart(username,password,Long.parseLong(selectClinic.get("id").toString()),Integer.parseInt(selectClinic.get("type_id").toString()));

}

}

});

2. 当一个Activity中很多地方需要使用到对话框,可以如下操作:

showDialog(R.id.wait_edit_arriveltime);

showDialog(R.id.wait_edit_yuyuedata);

showDialog(R.id.wait_edit_close);

......

protected Dialog onCreateDialog(int id) {

Dialog dialog = null;

switch (id) {

case R.id.wait_edit_yuyuedata:

DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {

@Override

public void onDateSet(DatePicker datePicker,int year, int month, int dayOfMonth) {

wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year);

}

};

dialog = new DatePickerDialog(this, dateListener, Integer.parseInt(app.getAppointedDate().split("/")[2]), Integer.parseInt(app.getAppointedDate().split("/")[1]), Integer.parseInt(app.getAppointedDate().split("/")[0]));

break;

case R.id.wait_edit_arriveltime:

TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {

@Override

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

wait_edit_arriveltime.setText(hourOfDay+":"+minute);

}

};

dialog = new TimePickerDialog(this, timeListener, Integer.parseInt(app.getEstimateArriveTime().split(":")[0]), Integer.parseInt(app.getEstimateArriveTime().split(":")[1]), true);

break;

case R.id.wait_edit_close:

AlertDialog.Builder builder = new AlertDialog.Builder(EditWaitActivity.this);

builder.setTitle("您要确定放弃编辑吗?");

builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface arg0, int arg1) {

EditWaitActivity.this.finish();

}});

builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,int whichButton) {

}

});

builder.show();

break;

default:

break;

}

return dialog;

}

3. 标准的adapter的格式,以后就按照这样的形式写

public class MyAdapter extends BaseAdapter{

Context context;

PageRecord data;

private ViewHolder tempHolder;

private View tempView;

public MyAdapter(Context context,PageRecord data){

this.context = context;

this.data = data;

}

public View getView(int position, View convertView, ViewGroup parent) {

final ViewHolder holder;

Appointment app = data.getResultSet().get(position);

if(convertView==null){

convertView=LayoutInflater.from(context).inflate(R.layout.item, null);

holder=new ViewHolder(convertView);

convertView.setTag(holder);

}else{

holder=(ViewHolder) convertView.getTag();

}

tempHolder = holder;

tempView = convertView;

holder.setData(app);

return convertView;

}

public long getItemId(int position) {

return position;

}

public Object getItem(int position) {

return data.getResultSet().get(position);

}

public int getCount() {

return data.getResultSet()==null?0:data.getResultSet().size();

}

public void setData(PageRecord data){

this.data = data;

this.notifyDataSetChanged();

tempView.invalidate();

}

/**

* 重新绘制

* @param app

*/

public void redraw(Appointment app){

tempHolder.timeView.setText(app.getAppointedDate()+" "+app.getEstimateArriveTime());

tempHolder.nameView.setText(app.getPatient().getNameEN());

tempHolder.doctorView.setText(app.getMo().getNameEN());

tempView.invalidate();

}

private class ViewHolder{

private TextView timeView;

private TextView nameView;

private TextView doctorView;

public ViewHolder(View convertView){

timeView = (TextView) convertView.findViewById(R.id.yuyuetime);

nameView = (TextView) convertView.findViewById(R.id.yuyuename);

doctorView = (TextView) convertView.findViewById(R.id.doctorname);

}

public void setData(Appointment app){

timeView.setText(app.getAppointedDate()+" "+app.getEstimateArriveTime());

nameView.setText(app.getPatient().getNameEN());

doctorView.setText(app.getMo().getNameEN());

}

}

}

4. 获取屏幕分辨率的两种方法

// 方法1 Android获得屏幕的宽和高

WindowManager windowManager = getWindowManager();

Display display = windowManager.getDefaultDisplay();

int screenWidth = display.getWidth();

int screenHeight = display.getHeight();

// 方法2

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

float width=dm.widthPixels*dm.density;

float height=dm.heightPixels*dm.density;

打印结果:width:320.0,height:480.0,screenWidth:320,screenHeight:480

dpi值的是屏幕上每英寸的像素点。如果一个160dpi的屏幕,1dp=1px。假如我现在有一个480*800,160dp的屏,那么他的实际面积要比480*800,240dp的屏面积大,但是清晰度却不如后面这个屏。

如果有些实体手机在做测试的时候发现得到的分辨率比实际的分辨率小很多,那么这里得到的是dp单位的像素值,可以通过dp的密度值来转换,如下:

480*800的手机(WVGA)density=240。

转换公式如下:

pixs =dips * (density/160)

dips=(pixs*160)/density

480*800单位是px。而320*533单位是dp

5,资源的一些应用

* 不同的layout

Android手机屏幕大小不一,有480x320,640x360,800x480.怎样才能让App自动适应不同的屏幕呢? 其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

* hdpi、mdpi、ldpi

前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。

* drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:

drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

* 屏幕方向

横屏竖屏自动切换

可以在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,这样在手机屏幕方向变化的时候系统会自动调用相应的布局文件,避免一种布局文件无法满足两种屏幕显示的问题。

* 禁用自动切换

只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。

Android:screenOrientation="landscape" //是限制此页面横屏显示

Android:screenOrientation="portrait"   //是限制此页面数竖屏显示

* 字体自适应大小

方法1:

首先根据不同分辨率获取不同字体大小。

在RES里创建

values-480x320/strings.xml 里面设置30px

values-800x400/strings.xml 里面设置40px

分别代表480X320 和 800X400分辨率情况下 字号为30px和40px;

在java文件中这样调用

int sizeOfText = (int) this.getResources().getDimension(R.dimen.Text_size);

方法2:

在视图的 onsizechanged里获取视图宽度,一般情况下默认宽度是320,所以计算一个缩放比率rate = (float) w/320  w是实际宽度

然后在设置字体尺寸时 paint.setTextSize((int)(8*rate));  8是在分辨率宽为320 下需要设置的字体大小实际字体大小 = 默认字体大小 x rate

希望本文所述对大家Android程序设计有所帮助。

Android程序设计报告总结,Android编程常用技巧实例总结相关推荐

  1. android实习报告,基于Android的毕业实习报告.doc

    基于Android的毕业实习报告 成绩: 西安建筑科技大学 毕业实习报告 院 (系): 信息与控制工程学院 专业班级: 计算机1201 实习单位: 计算机技术应用研究所 实习时间: 2015.2.25 ...

  2. android程序设计b答案,Android程序设计练习卷答案.doc

    Android程序设计练习卷答案 在android程序中,Log.d()用于输出什么级别的日志信息?(A) 调试 B.信息 C.警告 D.错误 2.以下情况不会创建Context对象的是(C) 创建A ...

  3. 【CSS3教程】CSS3基础常用技巧实例集合

    为什么80%的码农都做不了架构师?>>>    CSS3常用技巧 CSS3下条纹&方格斜纹背景的实现 一.效果抢先:CSS3下的条纹背景demo 这些美丽的纹饰全部都是由CS ...

  4. android程序设计activity,《Android编程权威指南》之第二个activity

    继续继续!<Android编程权威指南>第五章,Demo比较简单,总结重点吧. 本章节知识点的Demo很有意思,就是添加个acitivity,方便用户偷看当前问题的答案. 创建第二个act ...

  5. android程序设计报告 尤志宁,尤志宁 - 集美大学 - 计算机工程学院

    个人简介 尤志宁,承担的主要课程:人工智能.软件工程..Net程序设计.Android嵌入式程序设计.电子商务 近五年的科研项目: 2016年福建省教育厅科技项目 项目负责人 2016年李尚大学科建设 ...

  6. android程序设计排序方法,Android编程之可以实现拖动排序的listview控件

    DragSortListView是一个可以实现拖动排序的listview控件,是我看到的交互较为复杂的开源代码中不管是代码质量还是流畅性都最好的. DragSortListView 简称DSLV,继承 ...

  7. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_Python编程常用技巧,你知道几个?...

    现在Python是个炙手可热的技能,很多人都想着入手学学Python编程,甚至包括一些知名人士,比如知名地产商潘石屹就开始学Python.关于Python编程的内容在网络上也非常多,本文虫虫给大家总结 ...

  8. android程序设计拍照,Android编程实现拍照功能的2种方法分析

    本文实例讲述了Android编程实现拍照功能的2种方法.分享给大家供大家参考,具体如下: Android系统的照相功能,已实现2种方法,可供大家参考: 1. 调用系统摄像头来拍照 首先,找到Andro ...

  9. 20175333曹雅坤实验四《Android程序设计》实验报告

    20175333实验四<Android程序设计>实验报告 一.实验内容及步骤 - Android程序设计-1 Android Stuidio的安装测试: 参考<Java和Androi ...

最新文章

  1. 放弃51单片机,直接学STM32开发会有什么严重的问题?
  2. 关于通讯作者、第一作者的那点事,你想知道的全都在这里!
  3. 十五、Redis三种特殊类型之二HyperLoglog
  4. npm 卸载_手把手教你创建一个NPM包
  5. 将pdf转换html_pdf文件怎么转换成html网页格式?用什么方法来转换?
  6. Pixhawk的传感器数据(陀螺、加计等)流程
  7. python怎样把if语句写成一行_python:将一个简单的if-then-else语句放在一行上
  8. python中o_Python O
  9. Atitit.web的自动化操作与信息抓取 attilax总结
  10. 查看计算机桌面隐藏文件夹,电脑怎么查看隐藏文件(隐藏文件夹显示方法)
  11. 什么是数据库的实体关系图(ERD)?
  12. 看完不会你揍我!!Pytorch利用文本数据建立自己的数据集- Dataset Dataloader详解 附案例
  13. 钢琴网页制作教程_钢琴
  14. andorid6.0 mtk6737平台 ctp调试方法
  15. 《unix环境高级编程》--- 终端I/O
  16. 笔记本上的 Ctrl 键突然无法使用
  17. weixingzh.com微信公众号网站介绍
  18. 杂谈对抽象事物的审美——繁体字与简体字,孰美?
  19. excel冻结窗口_你会Excel吗?14个Excel神奇功能+8个Excel小技巧+Excel常见快捷键,提升办公效率...
  20. 服务器性能计数器驱动没装上,安装和删除 AD DS 的已知问题

热门文章

  1. 中国水刀切割机(水刀切割机)行业市场供需与战略研究报告
  2. 中国水下充气袋行业市场供需与战略研究报告
  3. 中国基站射频设备行业市场供需与战略研究报告
  4. C语言实现TCP服务端
  5. 从入门到入土:基于Python|ACK|FIN|Null|Xmas|windows|扫描|端口扫描|scapy库编写|icmp协议探测主机|对开放端口和非开放端口完成半连接扫描|全连接扫描|
  6. @所有技术人,快来翻开属于你的2021定制日历!
  7. 是!“不会数据分析的,全是假程序员”!HR:太真实……
  8. 怎样用 Python 控制图片人物动起来?一文就能 Get!
  9. 直播:CSDN 联合腾讯安全上线公开课,分享云原生安全技术理解和应用实践
  10. “编程能力差,90%输在了这点上!”骨灰级工程师:其实你们都是瞎努力!