Android 开发小技巧(2)
转自:农民伯伯: http://www.cnblogs.com/over140/
常用代码
7.1 在当前Activity中启动另外一个Activity
startActivity(new Intent(this,目标Activity.class));
7.2 从当前ContentView从查找控件
(Button)findViewById(R.id.btnAbout)//R.id.btnAbout指控件id。
7.3 获取屏幕宽高
-
DisplayMetrics dm = new DisplayMetrics();
-
-
//获取窗口属性
-
-
getWindowManager().getDefaultDisplay().getMetrics(dm);
-
-
int screenWidth = dm.widthPixels;//320
-
-
int screenHeight = dm.heightPixels;//480
7.4 无标题栏、全屏
-
//无标题栏
-
-
requestWindowFeature(Window.FEATURE_NO_TITLE);
-
-
//全屏模式
-
-
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
-
-
WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
-
//注意在setContentView()之前调用,否则无效。
7.5 注册activity
所有用到的Activity都必须在AndroidManifest.xml中注册,否则会报空指针错误。如:<activity android:name="com.common.TestView"> ,注意是包名+类名。
八、 Adb命令行
8.1 DOS进入android-sdk-windows\tools目录
8.2 Linux
登录linux命令:adb shell
列出当前文件:ls
删除文件:rm 文件名
8.3 Sqlite
登录sqlite命令:sqlite3
8.4 Adb命令
列出当前有哪些活动的模拟器:adb devices
上传文件:adb push
安装apk文件:adb install android123.apk
九、 Apk文件破解
9.1 获取apk的资源图片
直接用 WinRAR打开,res/drawable直接拖拽出来即可。
9.2 获取xml文件信息
虽然能用WinRAR看到里面的xml文件,但是xml是经过优化的,无法直接查看,需要使用apktool工具,下载地址:https://code.google.com/p/android-apktool/。
下载apktool-1.3.1.tar.bz2和apktool-install-windows-2.2_r01-2.tar.bz2解压到同一个目录,然后把待破解的apk文件拷贝到同一目录,DOS进入该目录,输入:aapt d 91callinfo.apk 91callinfo,这里第四个参数为破解完存放的路径。
9.3 反编译dex获取Java源代码
Apktool工具只能反编译成smali的中间代码文件,这里需要借助另外一个开源工具:dex2jar,下载地址:http://code.google.com/p/dex2jar/。这个工具不能直接翻译成java文件,但是可以把dex文件转换成jar文件,然后可以通过jad工具把jar文件反编译成Java源文件,如果只是看看源码的话可以用jd-gui,下载地址:
http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip 。
dex文件(classes.dex)可以用WinRAR从apk文件中解压出来。
十、 小技巧
10.1 使用系统的图标
例如调用系统打电话的图标:
<ImageView android:src="@android:drawable/ic_menu_call"
图标名称和效果(Android1.5和1.6):
http://since2006.com/android/1.5-drawables.php
http://since2006.com/android/1.6-drawables.php
10.2 让控件透明,如ImageButton
设置android:background="@null"
10.3 在layout中直接指定onclick方法
不用手动绑定,在layout中设置android:onClick=”methodName”,methodName为对应Activity中的方法,如下格式:
public void methodName(View view){} (适应1.6以上版本)
10.4 用PC键盘控制模拟器
PC键盘 |
模拟器按键 |
说明 |
Home |
Home |
主页 |
F2 |
Menu |
菜单 |
Esc |
Back |
后退 |
F3 |
Call |
打电话 |
F4 |
Hangup |
挂断 |
F5 |
Search |
搜索 |
Ctrl+F12 |
|
横竖屏切换 |
10.5 进入界面就显示/隐藏软键盘
在AndroidManifest.xml中设置activity的
android:windowSoftInputMode="stateHidden"
10.6 界面可视化布局工具
系统提供可视化布局并不好用,这里推荐一款,布局完后点生成代码即可:
DroidDraw:http://www.droiddraw.org/
10.7 在Eclipse中看Android的源码
将源代码拷贝至android-sdk-windows\platforms\android-4\sources下即可。注意源码版本对应android-4文件夹,这里指Android1.6的源码。
十一、 Q & A
11.1 用模拟器调试频繁连不上,或者报emulator-5554 disconnected的错误?
Window(窗口) -> Show Views(显示视图) -> device -> view menu(视图菜单)-> Reset adb
11.2 匿名类中如何使用this?
classname(类名).this
在进行android开发时,每个Activity会默认带上一个title bar用以显示程序名,有时为了扩大屏幕的显示区域需要去掉这个title bar,去掉屏幕上的title bar有3个方法,
第一个方法是在代码去掉title bar
在Activity的onCreate中加入如下代码:
但是使用这种方法,是在Activity将要显示的时候,仍然会出现title bar,然后再将其去掉,用户体验不好。
第二种方法是使用style配置文件,步骤如下:
1.在res/values文件夹下创建一个xml文件,名为mainStyle.xml,内容如下:
-
<?xml version="1.0" encoding="utf-8"?>
-
-
<resources>
-
-
<style name="NoTitle" parent="android:Theme">
-
-
<item name="android:windowNoTitle">true</item>
-
-
</style>
-
-
</resources>
2.然后在AndroidManifest.xml中需要去掉title bar的activities的节点上加上一个样式属性,代码如下
-
<activity android:name=".view.AutoTaskDemo" android:label="@string/app_name"
-
-
android:configChanges="keyboardHidden|orientation|locale" android:theme="@style/NoTitle">
第三种方法是直接在AndroidManifest.xml中进行修改,
把需要去掉title bar的activities的节点上加上一个样式属性,代码如下:
-
<activity android:name=".view.SettingActivity"
-
-
android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.NoTitleBar"/>
也可以在AndroidManifest.xml文件的application节点上修改,对所有的activity都有效,代码如下:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
在开发一些与定位有关的程序的时候,经常需要获得设备的Location,获取设备的Location的方法如下:
1.创建一个LocationListener接口的实现类,可以使用匿名类,代码如下:
-
public final LocationListener mLocationListener01 = new LocationListener() {
-
@Override
-
public void onLocationChanged(Location location) {}
-
-
@Override
-
public void onProviderDisabled(String provider) {}
-
-
@Override
-
public void onProviderEnabled(String provider) {}
-
-
@Override
-
public void onStatusChanged(String provider, int status, Bundle extras) {}
-
};
2.创建LocationManager,并且调用其上的requestLocationUpdates方法,注意:这里需要GPS和NetWork都要请求更新location,前者为WIFI/基站定位,后者为GPS定位,当一种定位方式不能使用的时候,还可以使用另外一种。
-
LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
-
-
locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 10,
-
mLocationListener01);
-
-
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10,
-
mLocationListener01);
3.编写获取location信息的方法,在这里先使用GPS定位方式获取location信息,如果获取不到就使用WIFI/基站方式获取:
-
public static Location getLocation(Context context) {
-
LocationManager locMan = (LocationManager) context
-
.getSystemService(Context.LOCATION_SERVICE);
-
Location location = locMan
-
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
-
if(location==null){
-
location = locMan
-
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
-
}
-
Log.i(TAG, "---location:" + location);
-
return location;
-
}
如何有效适应Android机差异较大的屏幕分辨率
其实,在你layout的xml文件中,编写的时候是不是用了许多的padding呢?如果是,那你就蛋疼了。因为这样的布局永远是无法适应所有手机屏幕的。正确的做法应该是使用weight属性。
- 过程很简单:首先,将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。
- 当包裹在控件外面的Layout的width、height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为9,控件B设置weight为20,那么A所占的空间为20/(9+20),B所占的空间为9/(9+20)。这样的反比属性对任何分辨率下的手机都是合适的。
- 当然,字体就不行了。那怎么保证字体能够跟布局一样能够自适应呢?
- 呵呵,很简单,就是在你的res文件夹中创建一个文件夹,叫做values-320x240。其中320x240是你手机屏幕的分辨率,根据你手机屏幕的情况做不同的命名,例如values-800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。
另外,值得提醒的是,记得在你默认的values文件下的dimens.xml文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的东西,没有写的话程序会崩溃。
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/8784966
- 点赞
- 收藏
- 关注作者
评论(0)