许多人在做完Keymap匹配到Eclispe快捷键后,发现查看资源或者函数在哪些地方被引用的快捷键“Ctrl+Shift+G”不灵了,你选中某个函数后,使用这个快捷键,发现只会光标跳到该类中引用这个函数的地方。原因是啥呢?
首先这里简单分析下,选择Keymap后IDE所做的工作及选择后发生快捷键失效原因,Android Studio设置KeyMap到Eclipse,是进行了一个快捷键的映射操作,但是Android
Studio本身的快捷键数量和Eclipse是不一样的,比如AndroidStudio中有100个快捷键,Eclipse中有95个,而且刚好Android Studio和Eclipse相同快捷操作点刚好是95个,当然实际的肯定不是这样,映射只能映射公共的部分,所以在映射完成后,很多人都会发现在Eclipse中能用的快捷键在AndroidStudio不能使了。
导致不能使的原因总共有四个:
1、Android Studio找不到和Eclipse一样的快捷键功能点,映射失败
2、另外一个原因是Android Studio中映射了的功能点快捷键和未映射的功能点快捷键存在冲突
3、快捷键需要在某些条件下触发才有效,这个很奇葩
4、你到快捷键列表看,快捷键是对的,然后对应的快捷功能描述也是对的,然后你发现也没有跟其他快捷键有冲突,但是就是私活不能用,啥问题,这个是因为在Android Studio和Eclipse中同名的功能功能点其实功能是不一样的。举个例子,比如快捷键功能点x,在Eclipse中是快速查找,但是在Android Studio有可能变成了错误提示。
原因4和原因2最容易出现。那怎么区分是哪个原因呢,首先找到快捷键对应的功能点,然后看看快捷键是否正确,正确的话,看看是否有冲突,如果存在冲突的话,解决冲突,解决冲突后看看行不行,不行的话那就是原因4了。原因4就比较不容易解决了。关于如何查看冲突,请戳这:Android Stuido如何查看快捷键冲突?
原因找到了,那如何解决了,这个时候只能自己找到快捷键设置选项,找到对应的功能点,设置你所想要的快捷键。
当然针对原因3,这个就不是解决办法了。
言归正传,映射完成后,不想自己去手动修改快捷键,那到底如何查看资源或者函数在哪些类中被引用,目前我知道的有3种方式:
1、快捷键:Ctrl+G,这种方法最简单,其实这边这个快捷键就是对应Eclipse中的Ctrl+Shift+G
2、快捷键:
Ctrl+Alt+Shift+F7,这个方法是第一种方法的复杂版,你可以在弹出的对话框中进行一些选择
3、快捷键:Ctrl+H,这个就是就是搜索功能了,Find in path。
注:当然也可以设置成鼠标操作的快捷键,如下图,选择第二项,然后在弹出的对话框中选择即可:
转载仅供参考,版权属于原作者。
Android Studio类
public class CommonUtil {
public static boolean hasSDCard() {
String status = Environment.getExternalStorageState();
return status.equals(Environment.MEDIA_MOUNTED);
}
/**
* 获取最大内存
*
* @return
*/
public static long getMaxMemory() {
return Runtime.getRuntime().maxMemory() / 1024;
}
/**
* 检查网络
*
* @param context
* @return
*/
public static boolean checkNetState(Context context) {
boolean netstate = false;
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
netstate = true;
break;
}
}
}
}
return netstate;
}
public static void showToast(Context context, String tip) {
Toast.makeText(context, tip, Toast.LENGTH_SHORT).show();
}
public static DisplayMetrics metric = new DisplayMetrics();
/**
* 得到屏幕高度
*
* @param context
* @return
*/
public static int getScreenHeight(Activity context) {
context.getWindowManager().getDefaultDisplay().getMetrics(metric);
return metric.heightPixels;
}
/**
* 得到屏幕宽度
*
* @param context
* @return
*/
public static int getScreenWidth(Activity context) {
context.getWindowManager().getDefaultDisplay().getMetrics(metric);
return metric.widthPixels;
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* 查询手机内非系统应用
*
* @param context
* @return
*/
public static List
List
PackageManager pManager = context.getPackageManager();
// 获取手机内所有应用
List
for (int i = 0; i < paklist.size(); i++) {
PackageInfo pak = (PackageInfo) paklist.get(i);
// 判断是否为非系统预装的应用程序
if ((pak.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
// customs applications
apps.add(pak);
}
}
return apps;
}
public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidth = ((float) width / w);
float scaleHeight = ((float) height / h);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
return newbmp;
}
/**
* 获取版本号和版本次数
*
* @param context
* @return
*/
public static String getVersionCode(Context context, int type) {
try {
PackageInfo pi = context.getPackageManager().getPackageInfo(
context.getPackageName(), 0);
if (type == 1) {
return String.valueOf(pi.versionCode);
} else {
return pi.versionName;
}
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
// 通过Service的类名来判断是否启动某个服务
public static boolean messageServiceIsStart(
List
String className) {
for (int i = 0; i < mServiceList.size(); i++) {
if (className.equals(mServiceList.get(i).service.getClassName())) {
return true;
}
}
return false;
}
}
1、快捷键:Ctrl+G,这种方法,其实这边这个快捷键就是对应Eclipse中的Ctrl+Shift+G.
2、快捷键: Ctrl+Alt+Shift+F7,可以在弹出的对话框中进行一些选择.
3、快捷键:Ctrl+H,这个就是就是搜索功能了,Find in path。