Android开发学习经验总结

1.       如何显示与不显示ActionBar ?

如果Activity class 继承的是 Activity , 无法显示ActionBar 。

已知的必定显示ActionBar的就是 ActionBarActivity

代码:

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.cool_menu,menu);

return true;

}

1.1       全屏加无状态栏:

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

2.       OnTouch 方法中,如果return值设为false,系统检测到这个Touch动作做完反应后,就不会再检查这个状态;如果设为true,就会时时检查,于是可以实现拖动的效果。

3.       灰色的小提示框 Toast

Toast toast = Toast.makeText(this,"不知阁下尊姓大名?",Toast.LENGTH_LONG);

toast.setGravity(Gravity.CENTER,0,0);//设置显示的位置

toast.show();

4.       findViewById() 用于查找和关联控件(button,TextView,ImageView 等)

5.       如果要查找Preference中的控件(如,CheckBoxPreference,EditTextPreference等)用以下方法:

PreferenceManager manager = getPreferenceManager();

CheckBoxPreference password = (EditTextPreference) manager.findPreference("password");

6.       获取Preference中的值使用:

PreferenceManager.getDefaultSharedPreferences(context).getString("user","");

或者分两步,方便查询同一个Preference中的多个值

SharedPreferences sharedPreferences =  PreferenceManager.getDefaultSharedPreferences(getBaseContext());

boolean willMusic = sharedPreferences.getBoolean("music",true);

String username = sharedPreferences. getString("user","");

7.       给Intent带上附加值Ertra

Intent i = new Intent(CSM_listView.this,ImageViewer.class);

i.putExtra("icon",data.icon);

startActivity(i);

接收方可以接收查看附加数据

int icon = getIntent().getIntExtra("icon",0);

也可以分两步,方便查询多个附加数据

Bundle bundle = getIntent().getExtras();

boolean willContinue = bundle.getBoolean("continueGame",false);

int icon = bundle.getInt ("icon",0);

8.       发Intent启动Activity并获取返回值

i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(Intent intent, int requestCode);

并定义对返回值的处理函数

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(resultCode == RESULT_OK ){ //操作没错误

Bundle extras = data.getExtras();

bmp = (Bitmap)extras.get("data");//关键词是“data”

viewPhoto.setImageBitmap(bmp);

}

}

9.       播放音乐

MediaPlayer mp;

mp = MediaPlayer.create(this,R.drawable.fengyanghuagu);

mp.setLooping(true);//循环播放

mp.setVolume(0.3f,0.3f);//设置音量

mp.start();

停止播放并释放占用的资源

mp.stop();

mp.release();

10.   对话提示框

10.1 带列表的提示框,点击列表项目启动对应的事件

new AlertDialog.Builder(this).setTitle(R.string.new_game_title)

.setItems(R.array.difficulty, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialoginterface, int i) { //i is the position of item clicked

startGame(i);

}

}).show();

注释:

/**

public void onClick(DialogInterface dialog, int which);

* This method will be invoked when a button in the dialog is clicked.

*

* @param dialog The dialog that received the click.

* @param which The button that was clicked (e.g.

*            {@link DialogInterface#BUTTON1}) or the position

*            of the item clicked.

*/

/* TODO: Change to use BUTTON_POSITIVE after API council */

10.2 带文本提示和按钮的提示框,点击按钮选择发生的事件

new AlertDialog.Builder(happyNewYear.this).setMessage("想继续游戏吗?").setPositiveButton("继续",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent i = new Intent(happyNewYear.this,sudugame.class);

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

i.putExtra("continueGame",true);

startActivity(i);

finish();

}

}).setNegativeButton("回主菜单",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent i = new Intent(happyNewYear.this,sudugame.class);

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

i.putExtra("continueGame",false);

startActivity(i);

finish();

}

}).show();

10.3  收起Dialog 的 函数

dismiss();

11.   防止手机进入休眠状态

PowerManager.WakeLock wl;

wl = pM.newWakeLock(PowerManager.FULL_WAKE_LOCK,"whatever");

wl.acquire();//启动休眠锁

wl.release();//释放休眠锁

更多模式参照 http://blog.csdn.net/airk000/article/details/9121003

12.   把较小的数据记录到Preference里方便下次继续,如游戏进度

getPreferences(MODE_PRIVATE).edit().putString(PREF_PUZZLE, toPuzzleString(puzzle)).putString("nochange_record",toPuzzleString(nochange_record)).commit();

//这里存放了两种记录数据,使用syntax sugar哎呦不错

调用存放的数据

puz = getPreferences(MODE_PRIVATE).getString(PREF_PUZZLE, easyPuzzle[0]);

tempNochange = getPreferences(MODE_PRIVATE).getString("nochange_record",emptyStr);

13.   关于StringBuilder

StringBuilder buf = new StringBuilder();   //使用StringBuilder制作string(由于要不停地在结尾添加字符,用这个更方便效率更高)

for(int element: puz){

buf.append(element);

}

return buf.toString();

14.   短时音效的使用(如枪声,按键音)

public SoundPool(int maxStreams, int streamType, int srcQuality)

* Constructor. Constructs a SoundPool object with the following

* characteristics:

*

* @param maxStreams the maximum number of simultaneous streams for this

*                   SoundPool object

* @param streamType the audio stream type as described in AudioManager

*                   For example, game applications will normally use

*                   {@link AudioManager#STREAM_MUSIC}.

* @param srcQuality the sample-rate converter quality. Currently has no

*                   effect. Use 0 for the default.

* @return a SoundPool object, or null if creation failed

* @deprecated use {@link SoundPool.Builder} instead to create and configure a

*     SoundPool instance

*/

public int load(Context context, int resId, int priority)

* @param context the application context

* @param resId the resource ID

* @param priority the priority of the sound. Currently has no effect. Use

*                 a value of 1 for future compatibility.

* @return a sound ID. This value can be used to play or unload the sound.

*/

例子:

SoundPool sp;

int explosion = 0;

sp = new SoundPool(5, AudioManager.STREAM_MUSIC,0);

explosion = sp.load(game, R.raw.mie,1);

sp.setVolume(explosion,1,1);

sp.play(explosion,1,1,0,0,1);//播放

15.   定义Paint的字体

Paint foreground = new Paint(Paint.ANTI_ALIAS_FLAG);//反锯齿画笔

foreground.setStyle(Style.FILL);  //充满

foreground.setTextSize(height * 0.75f);  //字体大小

foreground.setTextScaleX(width / height);  //字体高宽比

foreground.setTextAlign(Paint.Align.CENTER);// 字体居格子中间

FontMetrics fm = foreground.getFontMetrics();// Centering in X: use alignment (and X at midpoint)

float x = width / 2;// Centering in Y: measure ascent/descent first

float y = height / 2 - (fm.ascent + fm.descent) / 2;

16.   清除之前的Activity 的stack 记录,使返回键无法返回(用于游戏结束收尾)

Intent i = new Intent(sudu_success.this,happyNewYear.class);

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);

finish();

17.   画图

canvas.drawBitmap(happyNY,changeX,changeY,null);

18.   延时

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

19.   多线程

Thread sleeper = new Thread(){

public void run(){

try {

sleep(1200);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

};

sleeper.start();

try {

sleeper.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

20.   做混合应用的时候webview 添加JavascriptInterface 后 js掉用方法 出现undefined 调试了一下午终于找到原因:

在绑定的方法前一定要加

@JavascriptInterface

否则在某些手机(比如红米)的webview中会出现调用方法时undefined的情况

时间: 2024-10-12 15:31:15

Android开发学习经验总结的相关文章

Android开发学习之路--网络编程之xml、json

一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类的就不再多讲了,参考http://cnbin.github.io/blog/2015/06/05/mac-an-zhuang-he-shi-yong-xampp/.安装好后,启动xampp,之后在浏览器输入localhost或者127.0.0.1就可以看到如下所示了: 这个就

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

Android开发学习---使用Intelij idea 13.1 进行android 开发

原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为什么放弃eclipse?太卡!! 实在受不了eclipse的卡了,运行WEB项目还好,但android开发实在太慢,太慢!经常卡死,CPU经常被占满! 看网上很多人都说比Intelij idea好用,就试下,目前还在test阶段,总之是各种不习惯,很多快捷键之类的跟eclipse完全不一样.还要多熟悉! 另外android studio 也比较卡,而且用起来相当难受,完全是intelij 的

【Android开发学习笔记】【第三课】Activity和Intent

首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

android 开发学习笔记 (一)

每个app 都有一个自己的 linux 进程: 每个进程都在自己的虚拟机里执行 两个app 可以跑在一个进程,一个vm里 android app 四大组件:activity,content provider,      services, broardcast receivers Content Resolver 激活 Content Provider You can start an      activity (or give it something new to do) by passi

Android开发学习---template requires a minimum SDK version of at least 7,build target API version of 14

adt 22.6.3的bug 当adt更新到22.6.3,其编辑器中最低支持api7,即android 2.1,这里可能是google故意这么做的,也可能是其bug.其target sdk 和compile sdk最低都为14,即anroid 4.0,这里建议都设为最高的api 19,即android 4.4;否则会一直报错,类似错误如下: This template requires a minimum SDK version of at least 7, and the current mi

android开发学习之路——连连看之游戏逻辑(五)

GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖,程序需要GameService组件包含如下方法.   ·start():初始化游戏状态,开始游戏的方法.     ·Piece[][] getPieces():返回表示游戏状态的Piece[][]数组.     ·boolean hasPieces():判断Pieces[][]数组中是否还剩Piec

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

android开发学习笔记000

使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个一直梦想走技术流的再疯狂一次.2014.08.06. 直奔主题——>android开发学习笔记001 android开发学习笔记000