android开发中遇到的问题汇总(五)
2015-05-19 12:29
435 查看
127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框
http://dwtedx.com/itshare_297.html128. Android TextView drawableLeft 在代码中实现
方法1Drawable drawable= getResources().getDrawable(R.drawable.drawable);
/// 这一步必须要做,否则不会显示.
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
myTextview.setCompoundDrawables(drawable,null,null,null);
方法2
public void setCompoundDrawablesWithIntrinsicBounds (Drawable left,
Drawable top, Drawable right, Drawable bottom)
129. /* 去锯齿 */ paint.setAntiAlias(true);
130.android 画图之setXfermode
http://blog.csdn.net/wm111/article/details/7299294setXfermode
[code]设置两张图片相交时的模式 我们知道 在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint; 而setXfermode就可以来解决这个问题 一般来说 用法是这样的 [java] view plaincopy Canvas canvas = new Canvas(bitmap1); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(mask, 0f, 0f, paint);
131. ubuntu android cordova
[code]Setting up PhoneGap on Ubuntu for Android app development
132.webview的页面都finish了居然还能听到视频播放的声音,查了下发现webview的
[code]onResume方法可以继续播放, onPause可以暂停播放, 但是这两个方法都是在Added in API level 11添加的,所以需要用反射来完成。 停止播放:在页面的onPause方法中使用: webView.getClass().getMethod("onPause").invoke(webView,(Object[])null); 继续播放:在页面的onResume方法中使用: webView.getClass().getMethod("onResume").invoke(webView,(Object[])null); 这样就可以控制视频的暂停和继续播放了。 在webView的Activity配置里面加上: android:hardwareAccelerated="true"
133.Create new project on Android, Error: Studio Unknown host ‘services.gradle.org’
[code]解决方法 please try following steps: Go to.. File --> settings --> HTTP Proxy [Under IDE Settings] --> Auto-detect proxy settings you can also use the test connection button and check with google.com if it works or not [关于红杏的公益代理, Android Studio以及freso的编译](http://www.liaohuqiu.net/cn/posts/about-red-apricot-and-compiling-fresco/)
134.ListView.setOnItemClickListener 点击无效
[code]如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效, 事件会被子View捕获到,ListView无法捕获处理该事件. 解决方法: 在checkbox、button对应的view处加android:focusable="false" android:clickable="false"android:focusableInTouchMode="false" 其中focusable是关键 从OnClickListener调用getSelectedItemPosition(),Click 和selection 是不相关的,Selection是通过D-pad or trackball 来操作的,Click通常是点击操作的。 arg2参数才是点击事件位置的参数
135.listview addheader 如果有多个header,可以把多个header封装。把封装后的view作为header
136.emojicon
emojicon, https://github.com/rockerhieu/emojiconemojicon, https://github.com/ankushsachdeva/emojicon
137.新闻评论页,如何实现盖楼,listview的高度自适应?
[code]控件的高度 设为wrap_content
138.android改变CheckBox和后面文字的间距 http://www.haodaima.net/art/1891872
[code]解决方法: 1.设置android:paddingLeft="25dip",就可以了。 2.设置checkbox的背景图片。系统默认的给checkbox加的有一个透明的背景。
139.volley请求超时 如何处理 http://stackoverflow.com/questions/17094718/android-volley-timeout
[code]myRequest.setRetryPolicy(new DefaultRetryPolicy( MY_SOCKET_TIMEOUT_MS, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
140.Listview getItemViewType的使用 对于不同xml,使用多个viewhold
141.Android “Only the original thread that created a view hierarchy can touch its views.” http://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi
[code]thread = new Thread(){ @Override public void run() { try { synchronized (this) { wait(5000); runOnUiThread(new Runnable() { @Override public void run() { dbloadingInfo.setVisibility(View.VISIBLE); bar.setVisibility(View.INVISIBLE); loadingText.setVisibility(View.INVISIBLE); } }); } } catch (InterruptedException e) { e.printStackTrace(); } Intent mainActivity = new Intent(getApplicationContext(),MainActivity.class); startActivity(mainActivity); }; }; thread.start();
142.Java SDK提供了对上述三种压缩技术的支持:Inflater类和Deflater类直接用zlib库对数据压缩/
[code]解压缩,GZIPInputStream类和GZIPOutputStream类提供了对gzip格式的支持,ZipFile、Zi pInputStream、ZipOutputStream则用于处理zip格式的文件。 所以,你应当根据你的具体需求,选择不同的压缩技术:如果只需要压缩/解压缩数据,你 可以直接用zlib实现,如果需要生成gzip格式的文件或解压其他工具的压缩结果,你就必须 用gzip或zip等相关的类来处理了。
143.利用volley进行http设置请求头、超时及请求参数设置(post)
[code]这里以post请求说明,get请求相似设置请求头及超时。 1.自定义request,继承com.android.volley.Request 2.构造方法实现(basecallback,为自定义的监听,实现Response.Listener,ErrorListener接口)--post请求 public BaseRequest(String url,String params, BaseCallback<T> callback) { super(Method.POST, url, callback); this.callback = callback; this.params = params; Log.e(TAG, "request:" + params); setShouldCache(false); } 3.请求头设置:重写getHeaders方法 @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); headers.put("Charset", "UTF-8"); headers.put("Content-Type", "application/x-javascript"); headers.put("Accept-Encoding", "gzip,deflate"); return headers; } 设置字符集为UTF-8,并采用gzip压缩传输 4.超时设置:重写getRetryPolicy方法 @Override public RetryPolicy getRetryPolicy() { RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); return retryPolicy; } 5.请求参数组装:重写getBody方法 @Override public byte[] getBody() throws AuthFailureError { return params == null ? super.getBody() : params.getBytes(); }
144. android handler的警告Handler Class Should be Static or Leaks Occur
[code]在使用Handler更新UI的时候,我是这样写的: public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO } } } 看起来很正常的,但是 Android Lint 却给出了警告: This Handler class should be static or leaks might occur 意思是说:这个Handler 必须是static的,否则就会引发内存泄露。 其实,对于这个问题,Android Framework 的工程师 Romain Guy 早已经在Google论坛上做出过解释,并且给出了他的建议写法: I wrote that debugging code because of a couple of memory leaks I found in the Android codebase. Like you said, a Message has a reference to the Handler which, when it's inner and non-static, has a reference to the outer this (an Activity for instance.) If the Message lives in the queue for a long time, which happens fairly easily when posting a delayed message for instance, you keep a reference to the Activity and "leak" all the views and resources. It gets even worse when you obtain a Message and don't post it right away but keep it somewhere (for instance in a static structure) for later use. 他的建议写法是: class OuterClass { class InnerClass { private final WeakReference<OuterClass> mTarget; InnerClass(OuterClass target) { mTarget = new WeakReference<OuterClass>(target); } void doSomething() { OuterClass target = mTarget.get(); if (target != null) { target.do(); } } } 下面,我们进一步解释一下: 1.Android App启动的时候,Android Framework 为主线程创建一个Looper对象,这个Looper对象将贯穿这个App的整个生命周期,它实现了一个消息队列(Message Queue),并且开启一个循环来处理Message对象。而Framework的主要事件都包含着内部Message对象,当这些事件被触发的时候,Message对象会被加到消息队列中执行。 2.当一个Handler被实例化时(如上面那样),它将和主线程Looper对象的消息队列相关联,被推到消息队列中的Message对象将持有一个Handler的引用以便于当Looper处理到这个Message的时候,Framework执行Handler的handleMessage(Message)方法。 3.在 Java 语言中,非静态匿名内部类将持有一个对外部类的隐式引用,而静态内部类则不会。 到底内存泄露是在哪里发生的呢?以下面代码为例: public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Post a message and delay its execution for 10 minutes. mLeakyHandler.postDelayed(new Runnable() { @Override public void run() { } }, 60 * 10 * 1000); // Go back to the previous Activity. finish(); } } 当Activity被finish()掉,Message 将存在于消息队列中长达10分钟的时间才会被执行到。这个Message持有一个对Handler的引用,Handler也会持有一个对于外部类(SampleActivity)的隐式引用,这些引用在Message被执行前将一直保持,这样会保证Activity的上下文不被垃圾回收机制回收,同时也会泄露应用程序的资源(views and resources)。 为解决这个问题,下面这段代码中的Handler则是一个静态匿名内部类。静态匿名内部类不会持有一个对外部类的隐式引用,因此Activity将不会被泄露。如果你需要在Handler中调用外部Activity的方法,就让Handler持有一个对Activity的WeakReference,这样就不会泄露Activity的上下文了,如下所示: public class SampleActivity extends Activity { /** * Instances of static inner classes do not hold an implicit * reference to their outer class. */ private static class MyHandler extends Handler { private final WeakReference<SampleActivity> mActivity; public MyHandler(SampleActivity activity) { mActivity = new WeakReference<SampleActivity>(activity); } @Override public void handleMessage(Message msg) { SampleActivity activity = mActivity.get(); if (activity != null) { // ... } } } private final MyHandler mHandler = new MyHandler(this); /** * Instances of anonymous classes do not hold an implicit * reference to their outer class when they are "static". */ private static final Runnable sRunnable = new Runnable() { @Override public void run() { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Post a message and delay its execution for 10 minutes. mHandler.postDelayed(sRunnable, 60 * 10 * 1000); // Go back to the previous Activity. finish(); } } 总结: 在实际开发中,如果内部类的生命周期和Activity的生命周期不一致(比如上面那种,Activity finish()之后要等10分钟,内部类的实例才会执行),则在Activity中要避免使用非静态的内部类,这种情况,就使用一个静态内部类,同时持有一个对Activity的WeakReference。
146.FragmentPagerAdapter (getSupportFragmentManager() ) You must call removeView() on the child’s parent
[code]How to solve for viewpager : The specified child already has a parent. You must call removeView() on the child's parent first
http://stackoverflow.com/questions/13559353/how-to-solve-for-viewpager-the-specified-child-already-has-a-parent-you-must
解决方法
I had the same problem when I used
[code]View res = inflater.inflate(R.layout.fragment_guide_search, container); inside Fragment.onCreateView(... You must call View res = inflater.inflate(R.layout.fragment_guide_search, container, false); or View res = inflater.inflate(R.layout.fragment_guide_search, null);
参考:
[1]https://groups.google.com/forum/?fromgroups=#!msg/android-developers/1aPZXZG6kWk/lIYDavGYn5UJ
[2]http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
[3]http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler
145. 使用代码为textview设置drawableLeft
[code]Drawable drawable= getResources().getDrawable(R.drawable.drawable); /// 这一步必须要做,否则不会显示. drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); myTextview.setCompoundDrawables(drawable,null,null,null);
146.Android如何在java代码中设置margin
[code]LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(10, 20, 30, 40); imageView.setLayoutParams(lp);
147.出错了表现:Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
[code]解决:谷歌出了 新的Multidex支持库 androidstudio https://developer.android.com/tools/building/multidex.html android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.0' }
148.How to get Nautilus-scripts working on Ubuntu 14.04?
[code]nautilus-actions-config-tool http://askubuntu.com/questions/281062/how-to-get-nautilus-scripts-working-on-ubuntu-13-04 设置好之后 nautilus -q。重启下nautilus服务生效 http://ubuntuhandbook.org/index.php/2014/04/ubuntu-14-04-add-open-as-rootadministrator-to-context-menu/
149. imageloader显示图片所使用的uri:
[code]String imageUri = "http://site.com/image.png"; // from Web String imageUri = "file:///mnt/sdcard/image.png"; // from SD card String imageUri = "content://media/external/audio/albumart/13"; // from content provider String imageUri = "assets://image.png"; // from assets String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch) 注意:使用drawable://除非你真的需要他。时刻要注意使用本地图片加载方法:setImageResource带代替ImageLoader。 五,有用的信息 1,ImageLoader.getInstance().init(config); // 在应用开启的时候初始化。 2,<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>sd卡缓存是需要写入权限 3,ImageLoader根据ImageView的width,height确定图片的宽高。 4,如果经常出现OOM ①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5; ②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888; ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者try.imageScaleType(ImageScaleType.EXACTLY); ④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象; ⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory(); 5,内存缓存,sd卡缓存,显示图片,可以使用已经初始化过的实现; 6,为了避免使用list,grid,scroll,你可以使用 boolean pauseOnScroll = false; // or true boolean pauseOnFling = true; // or false PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling); listView.setOnScrollListener(listener);
150.View’s getWidth() and getHeight() returning 0
[code]You should use: image1.getLayoutParams().width; http://stackoverflow.com/questions/18268915/views-getwidth-and-getheight-returning-0
151.GridView的行数问题
[code]在gridview里边设置属性 android:numColumns="3";意思是三列 然后在BaseAdapter的 getCount()方法 里边返回9。这样就可以平分为3行3列了
152.ArrayList和数组间的相互转换 http://wanglihu.iteye.com/blog/243238
[code]ArrayList提供public <T> T[] toArray(T[] a) public static <T> List<T> asList(T... a)
153.Unexpected response code 500
[code]网页已经被关闭 还有就是,一般由于内部服务器错误造成的。 服务器关闭或者服务器升级而造成的资源无法访问 由于服务器太忙而造成的,此时无法处理请求。通讯量超出 Web 站 点的能力
154. banner广告及view pager 的小圆点指示器 CirclePageIndicator http://9437752.blog.51cto.com/9427752/1580984
155.使用ViewPager+GridView实现横向滑动的效果 /article/1546108.html
156.CircleImageView https://github.com/hdodenhof/CircleImageView
157.ViewPager FragmentPagerAdapter Nullpointer fragmentpageradapter和pageradapter的区别。使用的场景。
158.unable to have ViewPager WRAP_CONTENT http://stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content
[code]Overriding onMeasure of your ViewPager as follows will make it get the height of the biggest child it currently has. @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; for(int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if(h > height) height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
159.在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,不支持这些类的子类或Android提供的其他控件。否则会引起ClassNotFoundException异常
160.Android模拟器Genymotion加载ARM架构so文件
[code]http://www.eoeandroid.com/thread-552875-1-1.html https://www.genymotion.com/#!/support?chapter=collapse-logs#faq
161.Viewpager wrap_hight导致不显示。 重写ViewPager
[code] /** * for bug : unable to have ViewPager WRAP_CONTENT */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int hight = 0; for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if (h > hight) hight = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(hight, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
162.选择项有RadioGroup和另外一个button组成 点击button的时候,清除radiogroup中选中的radiobutton。调用radiogroup的clearCheck方法即可
163.gridview columnnum。上传照片
164. 9.png Error:Must have one-pixel frame that is either transparent or white. -xxx/app/src/main/res/drawable-xhdpi/icon_addpic_focused.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
解决方法如下this is the problem with latest adt that is 20.0.3. you can instead rename the .9.png to .png and start working. i think this is the bug with the adt only, since for 18.0.0 version adt it doesnt prompts for this type of error and works fine
165. IntentRecieverLeakedException, Are you missing a call to unregisterReceiver() ? in android
[code]注册广播接收者有两种方式,一种在清单文件中注册。这个是长期有效的。另外一种是。在activity中注册,这种注册的生命周期在actity的生命周期内,还有第二种注册不要registerReceiver必须要和unregisterReceiver配套使用,否则会出现上述问题。 http://stackoverflow.com/questions/9078390/intentrecieverleakedexception-are-you-missing-a-call-to-unregisterreceiver
SVN Ignore files in Android Studio http://stackoverflow.com/questions/23536563/svn-ignore-files-in-android-studio
There was nothing in the repository, until I did Share Directory on the project. It then created the folder for the project in the repository. I entered the following in Settings|Version Control|Subversion:
File:.idea/workspace.xml
File: .gradle
Directory: build/
Mask: *.iws
Directory: .idea/libraries/
Directory: app/build/
File: local.properties
下面的更彻底
*.iml
*.iws
*.ipr
.idea/
.gradle/
local.properties
*/build/
*~
*.swp
167. packagingOptions {
[code] exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' }
168.CLEAN
Android Studio fails to debug with error org.gradle.process.internal.ExecExceptionError:Execution failed for task ‘:app:dexDebug’.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘C:\Program Files\Java\jdk1.7.0_11\bin\java.exe” finished with non-zero exit value 2
169.Eclipse混淆文件导入Android Studio Gradle编译报input jar file is specified twice http://blog.csdn.net/X_i_a_o_H_a_i/article/details/41979983
原因是build.gradle文件配置了
dependencies {
compile fileTree(include: ‘*.jar’, dir: ‘libs’)
}
里面已经添加过jar包,混淆文件proguard-rules.pro里面又加了句-libraryjars libs/.jar,将-libraryjars libs/.jar 前面用#号注释或者直接删掉即可。
170.key.java android-stuido 中错误提示:“非法字符: \65279” http://www.cnblogs.com/littlehb/archive/2013/04/20/3032721.html
对设置为“UTF-8”编码的文件在修改后保存时自动加入了UTF-8文件签名,即BOM(将文件以十六进制形式查看,可见文件首部为“EF BB BF”).解决方法:
使用Notepad++去除BOM 【在IntelliJ IDEA 12使用,可成功】
[code]具体方法:先设置以UTF-8无ROM方式编码,然后打开文件,另存此文件,覆盖掉原文件。 设置方法:格式->以UTF-8无ROM方式编码。
171.LocalBroadcastManager 解决fragment中通信的问题
[code]最近在开发平板项目,完全是fragmentactivity+fragment的结构。看起来似乎简单,但是和以前不同的是,业务逻辑非常复杂,多处的非常规跳转, fragment之间的数据交换,一处更新多处更新等操作,有时玩起来都心塞。项目背景介绍完毕。 现在有这样一个场景,项目需求是,后台可配置功能,也就是说app端所有的功能都是后台配置上去的动态生成,对应的功能界面如下图。 能够完成在应用内的广播发送,而且比全局广播更具优势: 1).广播只会在你的应用内发送,所以无需担心数据泄露,更加安全。 2).其他应用无法发广播给你的应用,所以也不用担心你的应用有别人可以利用的安全漏洞 3).相比较全局广播,它不需要发送给整个系统,所以更加高效。 2. 使用方式 广播注册: LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); IntentFilter filter = new IntentFilter(); filter.addAction(ACTION); myBroadcastReciver = new MyBroadcastReciver(); localBroadcastManager.registerReceiver(myBroadcastReciver, filter); 复制代码 广播发送: Intent intent = new Inten(); intent.setAction(SaleLeftFragment.ACTION); intent.putExtra(TAG, data); LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent); 复制代码 3.使用注意 在使用的时候,请关注以下几点: 1).LocalBroadcastManager注册广播只能通过代码注册的方式。 2).LocalBroadcastManager注册广播后,一定要记得取消监听。 3).重点的重点,使用LocalBroadcastManager注册的广播,您在发送广播的时候务必使用
Fragment间的广播消息接收
[code]广播注册,可以写在Activity(onCreate),也可以写在Fragment(onActivityCreated)里。 复制代码 LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity()); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.intent.action.CART_BROADCAST");//建议把它写一个公共的变量,这里方便阅读就不写了。 BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent){ System.out.println("OK"); } }; broadcastManager.registerReceiver(mItemViewListClickReceiver, intentFilter); 复制代码 发送广播 Intent intent = new Intent("android.intent.action.CART_BROADCAST"); LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
172.[How can I] Change the password, so I can share it with others and let them sign
Using keytool:[code]keytool -storepasswd -keystore /path/to/keystore Enter keystore password: changeit New keystore password: new-password Re-enter new keystore password: new-password
173.How to create a release signed apk file using Gradle?
http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle174.No activity found to handle intent action.dial
Uri.parse(“tel:” + a1)Android 调用系统Email –多附件
Intent.ACTION_SENDTO 无附件的发送
Intent.ACTION_SEND 带附件的发送
Intent.ACTION_SEND_MULTIPLE 带有多附件的发送
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse(“mailto:455245521@qq.com”));
data.putExtra(Intent.EXTRA_SUBJECT, “这是标题”);
data.putExtra(Intent.EXTRA_TEXT, “这是内容”);
startActivity(data);
175.HTML 中有用的字符实体
注释:实体名称对大小写敏感!显示结果 描述 实体名称 实体编号
空格
< 小于号 < <
大于号 > >
& 和号 & &
” 引号 " "
’ 撇号 ' (IE不支持) '
¢ 分 ¢ ¢
£ 镑 £ £
¥ 日圆 ¥ ¥
€ 欧元 € €
§ 小节 § §
© 版权 © ©
® 注册商标 ® ®
™ 商标 ™ ™
× 乘号 × ×
÷ 除号 ÷ ÷
176.Generating signed release APK using Gradle https://github.com/almalkawi/Android-Guide/wiki/Generating-signed-release-APK-using-Gradle
[code] How to create a release signed apk file using Gradle? http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle android { compileSdkVersion 17 signingConfigs { releaseSigning { storeFile file(System.getenv("ANDROID_KEYSTORE")) storePassword System.console().readLine("\nStore password: ") keyAlias System.getenv("ANDROID_KEYALIAS") keyPassword System.console().readLine("Key password: ") } } buildTypes { release { signingConfig signingConfigs.releaseSigning } } } Now, you can generate the signed and zipaligned release APK using the Gradle task: ./gradlew assembleRelease
177.Android Studio: How to use Monitor(DDMS) tool to debug application step by step?
[code]Go to "Tools > Android > Android Device Monitor" in v0.8.6. That will pull up the DDMS eclipse perspective. dump viewhierarchy for ui automator 可以查看应用的布局,当对某个app布局感兴趣时,可以采用此种方式查看此app的布局,相当于布局反编译功能。
178. 如何通过java代码设置textview字体加粗。
[code]textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗
179.qickreturn swiperefreshlayout
180. viewpager中彻底性动态添加、删除Fragment http://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android
[code]viewpager在加载当前页的时候已经将pager页左右页的内容加载进内存里了,这样才保证了viewpager左右滑动的时候的流畅性; 为了解决彻底删除fragment,我们要做的是: 1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。 2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可;
181. Uri.encode
182.omniplan mac
183.androidstudio svn delete
184.GreenDao query OR within AND
[code]http://stackoverflow.com/questions/22785327/greendao-query-or-within-and QueryBuilder.and() and QueryBuilder.or() are used to combine WhereConditions. The resulting WhereConditions have to be used inside QueryBuilder.where() (which will combine the conditions using AND) or QueryBuilder.whereOr().
185.greendao 删除某个对象
http://www.cnblogs.com/spring87/p/4364769.html1.public void deleteCityInfo(int cityId)
2.{
3.QueryBuilder qb = cityInfoDao.queryBuilder();
4.DeleteQuery bd = qb.where(Properties.CityId.eq(cityId)).buildDelete();
5.bd.executeDeleteWithoutDetachingEntities();
6.}
187. androidstudio ctrl+shift+t 模糊搜索类
[code] ctrl+o 本文件的函数 ctrl+g 全局搜索类 变量 函数 alter+insert 快速插入getset等 Ctrl+Shift+F7 可以高亮当前元素在当前文件中的使用 Android Studio 如何提示函数用法? 先选中,然后按F2
188.Fragment的通信有关问题, 新建Fragment为何不要在构造方法中传递参数
http://233.io/article/1057296.html189.
在理解反射的时候,不得不说一下内存。先理解一下JVM的三个区:堆区,栈区,和方法去(静态区)。
堆区:存放所有的对象,每个对象都有一个与其对应的class信息。在JVM中只有一个堆区,堆区被所有的线程共享。
栈区:存放所有基础数据类型的对象和所有自定义对象的引用,每个线程包含一个栈区。每个栈区中的数据都是私有的,其他栈不能访问。
栈分为三部分:
基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:即静态区,被所有的线程共享。方法区包含所有的class和static变量。它们都是唯一的。
[code]在启动一个java虚拟机时,虚拟机要加载你程序里所用到的类 ,这个进程会首先跑到jdk中(在jdk的jre/lib/ext文件夹里找那些jar文件),如果没有找到,会去classpath里设置的路径去找。 在找到要执行的类时: 1.首先将找到的类的信息加载到运行时数据区的方法区。这个过程叫做类的加载。所以一下static类型的在类的加载过程中就已经放到了方法区。所以不用实例化就能用一个static类型的方法。 2.加载完成后,在new一个类时,首先就是去方法区看看有没有这个类的信息。如果没有这个类的信息,先装载这个类。then,加载完成后,会在堆区为new的这个类分配内存,有了内存就有了实例,而这个实例指向的是方法区的该类信息。其实就是存放了在方法区的地址。而反射就是利用了这一点。
更多问题请关注 android开发遇到问题点滴
相关文章推荐
- android开发过程中遇到的一些问题汇总
- Android游戏开发中使用Libgdx引擎遇到的问题及解决办法汇总
- android开发中经常遇到的问题汇总
- android 开发中遇到的问题汇总
- android开发中经常遇到的问题汇总
- android开发中遇到的问题汇总【六】
- android开发中遇到的问题汇总【七】
- android开发中遇到的问题汇总【八】
- Android开发遇到问题汇总
- Android-开发遇到的问题汇总
- android开发中经常遇到的问题汇总
- android开发中遇到的问题汇总【二】
- android开发中遇到的问题汇总【三】
- android开发中遇到的问题汇总【四】
- android开发中遇到的问题汇总
- android开发中遇到的问题汇总【九】
- Android开发错误——Android Studio中遇到过的错误问题与解决方案汇总
- android 开发中遇到的问题汇总
- Android开发细节——开发过程中遇到的细节问题与解决方案汇总【转】
- Android开发细节——开发实战过程中遇到的细节问题与解决方案汇总