File src = new File(Environment.getExternalStorageDirectory()+"/emoji/img"); File[] files = src.listFiles(); LogUtil.info("file length:"+files.length); for (int i = 0; i < files.length; i++) { LogUtil.info("rename..."+i); File f = files[i]; String name = f.getName(); name = name.substring(0, name.indexOf(".")); String hexString = Integer.toHexString(Integer.parseInt(name)); File toFile = new File(src.getAbsolutePath()+"/emoji_"+hexString+".png"); f.renameTo(toFile); }
public void onClick_RandomFace(View view) { // 随机产生1至9的整数 int randomId = 1 + new Random().nextInt(9); try { // 根据随机产生的1至9的整数从R.drawable类中获得相应资源ID(静态变量)的Field对象 Field field = R.drawable.class.getDeclaredField("face" + randomId); // 获得资源ID的值,也就是静态变量的值 int resourceId = Integer.parseInt(field.get(null).toString()); // 根据资源ID获得资源图像的Bitmap对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId); // 根据Bitmap对象创建ImageSpan对象 ImageSpan imageSpan = new ImageSpan(this, bitmap); // 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像 SpannableString spannableString = new SpannableString("face"); // 用ImageSpan对象替换face spannableString.setSpan(imageSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 将随机获得的图像追加到EditText控件的最后 edittext.append(spannableString); } catch (Exception e) { } }
在该方法 中随机获得了face1.png至face9.png中任意一个图像资源的ID。最常用的方法是将这9个图像资源ID放到数组中,然后随机产生一个数组索 引来获取相应的图像资源ID
int resId = getResources().getIdentifier(getItem(position), "drawable", getPackageName());传递的参数分别是:字符串,目录,包名
在自定义的GridView中加入以下代码即可:
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }
由于listview.getChildAt(lastPosition)针对的只是当前显示那个View来说的,listview上下拖动时总是会刷新下view载入新数据,清楚当前不显示的数据,不然的话当listview数据量过大时如果同时载入过量的数据,那么后果可想而知
解决方法:用得到的position减去第一个可见的item的位置即可
int po = position - listview.getFirstVisiblePosition(); View mView = listview.getChildAt(po);
首先确定你的SDK是新的。
其次接下来检查你的.xml文件,文件名不能大写。
如果xml文件太多 ,那么clean一下你的项目,这时候注意看Console的提示。
Console会提示你xml文件错误在哪里
修改完xml文件之后
clean你的项目,再build你的项目
R.java会重新出现或更新
出现原因:经上网查阅资料得知,这个android 的一个bug 。在android 2.2 以下(包括2.2) 用 BitmapFactory.decodeStream() 这个方法,会出现概率性的解析失败的异常。
解决办法:
一、如果从网络获取到的InputStream,将其装换为Byte
//定义一个根据图片url获取InputStream的方法 public static byte[] getBytes(InputStream is) throws IOException { ByteArrayOutputStream outstream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; // 用数据装 int len = -1; while ((len = is.read(buffer)) != -1) { outstream.write(buffer, 0, len); } outstream.close(); // 关闭流一定要记得。 return outstream.toByteArray(); } //然后使用方法decodeByteArray()方法解析编码,生成Bitmap对象。 byte[] data = getBytesFromInputStream(new URL(imgUrl).openStream()); Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
BitmapFactory.decodeFile(file.getAbsolutePath(), opts);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
http://www.gsdtarena.com/a/Androidjc/327.html
当OnCreate函数发生时,只是提供了数据初始化的机会,此时还没有正式绘制图形。而绘制图形在OnDraw中进行,此时计算又显得太晚。容易想到的办法是:希望能在程序刚刚测量好某个指定控件后,拿到它的宽度和高度立刻进行计算或数据初始化。这就需要有一个方法来监听到这个事件的发生,幸好Android提供了这样的机制,利用View类中的getViewTreeObserver方法,可以获取到指定View的观察者,在绘制控件前的一刹那进行回调,这样速度上又不耽误,得到的数据由是准确的,但此方法在之后可能会被反复调用,因此需要加入限制,普通需求下,只计算一次就够了,代码如下(此代码在OnCreate回调函数中验证通过,实时上,因为它是监听器,所以发生事件时已经和OnCreate无关了):
layout = (MetroLayout) findViewById(R.id.layout); ViewTreeObserver vto = layout.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { if (hasMeasured == false) { int height = metroLayout.getMeasuredHeight(); int width = metroLayout.getMeasuredWidth(); //获取到宽度和高度后,可用于计算 hasMeasured = true; } return true; } });
http://blog.sina.com.cn/s/blog_a2a3823601010hal.html
设置控件的margin的距离
得到LayoutParams,用里面的setMargins(10, 20, 30, 40);即可
android.content.res.Resources$NotFoundException: String resource ID #0x0
后来发现,原来是在设置
holder.watchNum.setText(record.getLookNum());
record.getLookNum()返回的是Int类型的,直接将它设置成String出错了,只要在设置之前转换成String即可!
要实现个需求,有个edittext,点击输入法上的向下箭头,收起输入法的时候,dismiss edittext。很简单的需求,android居然没提供监听输入法收起的接口!只能通过间接的方式,原理是,给activity加上android:windowSoftInputMode="adjustResize",自定义Layout作为最外层的Layout,键盘收起的时候会调用自定义Layout的onSizeChange等方法,这个时候相当于监听到输入法收起的事件...还有个条件,activity不能设全屏!
it really sucks!
不是第一次遇到这种让人开发起来很难过的地方了。还有几个顺便提一下,很经典的4.0系统上无法监听home键,曾让多少码农伤神。
系统的有序和无需广播并且可以设置优先级导致一票的公司设置receiver的优先级来抢系统的来电广播,也不好说是系统设计鸡肋还是开发公司无下限了,居然还有setPriority(Integer.MAX_VALUE)的。只有SDK文档里面的一句"Applications must use a value that is larger than SYSTEM_LOW_PRIORITY and smaller than SYSTEM_HIGH_PRIORITY",光说没限制有什么用,靠自觉?
Fragment的推出在理念上确实能让开发灵活不少,能让开发者在适应多如牛毛的机器类型时稍微舒服点。但是如果现在就在开发中加入Fragment的话,你会发现工作量不但没减少,反而增加了。你需要为3.0以下的和3.0以上的机器重新写一套程序,好嘛,不仅是布局写两套,连代码也是两套!这个说来又是版本分裂的问题,官方一年出个大版本,新特性的兼容性基本没有。
http://blog.csdn.net/chang_xing/article/details/8105775
/** * * @param activity * @return > 0 success; <= 0 fail */ public static int getStatusHeight(Activity activity){ int statusHeight = 0; Rect localRect = new Rect(); activity.getWindow().getDecorView( ).getWindowVisibleDisplayFrame(localRect); statusHeight = localRect.top; if (0 == statusHeight){ Class<?> localClass; try { localClass = Class.forName( "com.android.internal.R$dimen"); Object localObject = localClass.newInstance(); int i5 = Integer.parseInt( localClass.getField("status_bar_height").get( localObject).toString()); statusHeight = activity.getResources( ).getDimensionPixelSize(i5); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } return statusHeight; }
EditText 多行文本光标如何移动到第一个字符,和最后一个字符呢。
1.光标如何移动到第一个字符前面
EditText et = new EditText(); et.requestFocus(); et.setText("很多很多的文字很多很多的文字很多很多的文字很多很多的文字");
1.光标如何移动到最后一个字符后面
EditText et = new EditText(); et.setText("很多很多的文字很多很多的文字很多很多的文字很多很多的文字"); et.requestFocus();
上面方法可能不太好用:下面的方法可以试一试
EditText et = new EditText(); et.setText("很多很多的文字很多很多的文字很多很多的文字很多很多的文字"); et.setSelection(et.getText().length());
MediaScannerConnection.scanFile( getApplicationContext(), new String[] { filepath }, null, null );
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[] { defaultImageDrawable, new BitmapDrawable(MeetApplication.getContext().getResources(), bitmap) }); transitionDrawable.setCrossFadeEnabled(true); iv_content_image.setImageDrawable(transitionDrawable); transitionDrawable.startTransition(100);
http://blog.csdn.net/geekpark/article/details/16118457
tips:pathPrefix最好不要加,判断应用唯一标示的主要是scheme
java 的 File rename方法
在混淆的时候就碰到了点问题,遇到嵌套的json数据无法成功转换成正确的对象
正确的解决方案(官网上提供了):http://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg