1.把Button或者ImageButton的背景设为透明或者半透明:
半透明
透明
其他透明度:在RGB的值前面加上数字(100以内),如#90436EEE(RGB为436EEE),#50436EEE,根据值的大小呈现不同的显示效果,值越小透明度越高。
2.设置按钮背景图片或颜色:
btn.setBackgroundResource(R.drawable.comment_sel);
btn.setTextColor(getResources().getColor(R.color.blue));
3.文字换行: ;(要加上分号).
4.布局时,不宜做过多的嵌套,否则容易报堆栈溢出异常。
5.9.png图片最好放在drawable-hdpi文件夹中,否则可能显示时可能会出现黑色的外边线。
6.android进程优先级:foreground Process(前台进程)>Visable Process(不在前端显示,但也没有完全隐藏,比如弹出一个对话框式的Activity)>ServiceProcess>Background Process>Empty Process。
7.Android进程启动:PackageServiceàPackageManagerà加载manifest配置文件—>读取MAIN和LAUNCHERà映射类的实例。
8.TextView设置符号时(如问号),要在英文键盘环境下输入,否则会被显示为省略号。
9.EditText追加字符:
edit.append("0");
edit.getText().insert(edit.getSelectionStart(),"0");
10. EditText去掉默认的边框:android:background="@null"或者 android:background="#00000000
11.weight的使用:weight的意义在于,对于父控件,若子控件能够完全显示,先分配没有设置weight的控件,对于有weight属性的控件,则根据weight的值等分布局的剩余部分。如右图:都采用RelativeLayout左中右布局,但是由于文字的字数不同结果出现第二个布局中文字换行。解决方法:对中间的TextView设置weight = 1;外层采用LinearLayout或其他都可以达到需要的效果。
12.转字符串时,优先选用String.valueOf。直接用toString时最好做一个非null判断。二者区别可参考源码。
13.android工程中如果出现(所有的)资源找不到异常,可能是图片问题,检查9.png是否有问题。
14.对LinearLayout(或其他widget)整个控件设置onclick事件:
(1).XML中设置CliClickable=true(也可以不用设置,区别在于设置为true之后必须在代码中注册监听事件,否则点击后程序会崩溃),然后直接重写onClick方法;
(2)XML中设置onClick=”name(响应事件的名称)” ,在Activity中写一个name(View v)的方法执行点击后的操作。
15. dialog/popupWindow的WindowLeaked异常:
AlertDialogdialog = new AlertDialog.Builder(this);
dialog.show();
finish();
android 上的dialog.show不会阻塞调用线程(如UI线程),导致dialog尚未dismiss或者cancel之前,dialog所依赖的context被关闭,因此出现windowleaked。但是此问题并不影响程序继续运行。
解决办法:在dialog的OnClickListener事件中先dismiss(onClick中有一个DialogInterface参数,直接调用此DialogInterface的dismiss即可)后再finish activity(点击按钮时先调用dialog的dismiss()方法,然后调用Activity的finish()方法)。
对于PopupWindow, 同样是在finish之前调用其dismiss()方法。
简单通用的方法时,重写Activity的finish()方法:
@Override
public void finish() {
if (null != mPopupWindow) {
mPopupWindow.dismiss();
}
super.finish();
}
16.xml中有EditText时,弹出键盘时导致页面向上收缩:
解决办法:在manifest.xml中对应的Activity设置android:windowSoftInputMode="adjustPan";并且如果该xml中有ListView时,不能设置android:fastScrollEnabled="true"android:focusable="true"(有待再次验证)。
如果布局中有EditText,默认隐藏软键盘:对Activity设置android:windowSoftInputMode="stateHidden"
17.若LinearLayout设置OnclickListener点击事件,则该LinearLayout中不宜放置Button按钮,否则当点击整个LinearLayout时,Button所占的区域无法执行点击命令。(也许可以通过设置focusable解决)
18. EditText的getText方法不会返回null(因此调用getText不必作mull判断)。
19.TextView设置字体粗体:
在xml文件中使用android:textStyle=”bold” 可以将英文设置成粗体,
但是不能将中文设置成粗体,
将中文设置成粗体的方法是:
TextView tv =(TextView)findViewById(R.id.TextView01);
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);
20.TimePicker,DatePicker:根据键盘输入动态更新日期
使用TimePicker,DatePicker时无法屏蔽软键盘,因此用户可以通过键盘输入日期。
假设有一个确定按钮。当用户通过键盘手动输入日期,点击确定,结果无法取到正确的日期值。解决方法:在findviewbyid找到TimePicker,DatePicker时首先调用它们的requestFocus(),点击确定时调用clearFocus()。
21.设置全屏 :
1)setContentView之前:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
2)自定义style:
对应的Activity设置android:theme=”@style/full_screen”
3)直接在Activity中设置android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
22.使View居中:
利用weight属性,可以在上下或左右各添加空View:
android:layout_height="0dp" android:layout_weight="1" /> 23.Fragment中嵌套ViewFlipper时,滑动触摸无响应: 在onCreateView中,对由inflate()得到的View设置view.setOnTouchListener(this); 在重写onTouch方法时返回true(而不再是detector.onTouchEvent(event))。 24.设置图片使其充满ImageView控件: 为了匹配ImageView的width和height属性(如:fill_parent),则设置scaleType=”fitXY”. 25.android的签名期限如果过期,项目就会报错,无法打包,不能通过编译。 26.在Adapter使用Intent启动Activity: 在构造器中传入Context参数,用Context.startActivity()启动Activity。 27.View设置padding和margin: Padding:直接调用setPadding(); Margin:先构造出LayoutParams params = newLayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);之后params.setMargins(10,1 0,1 0, 10);最后 view. setLayoutParams(params); 28.软键盘imeOptions的用法: android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键 android:imeOptions="actionNone" //输入框右侧不带任何提示 android:imeOptions="actionGo" //右下角按键内容为'开始' android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索 android:imeOptions="actionSend" //右下角按键内容为'发送' android:imeOptions="actionNext" //右下角按键内容为'下一步' android:imeOptions="actionDone" //右下角按键内容为'完成' 29.EditText设置字符长度限制: XML: android:maxLength=“15 Code: editText.setFilters(newInputFilter[]{new InputFilter.LengthFilter(15}); 30. java.lang.InstantiationException:can't instantiate class com.sns.ui.Login$UserLogin; no empty constructor 内部类UserLogin声明成static。 31. 判断当前为飞行模式: Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 0; 32.监听enter键,点击enter实现登录或其他响应事件: editText.setOnEditorActionListener(newOnEditorActionListener() { @Override publicboolean onEditorAction(TextView v, int actionId, KeyEvent event) { // TODOAuto-generated method stub Server.login(Login.this,name, pwd); returnfalse; } }); 33.若Activity设置全屏,则Fragment中setHasOptionsMenu(true);将看不到菜单项。 34. PopupWindow:点击外部窗体时使其消失 上面的方法已经过时,使用下面这个新方法: popupWindow.setBackgroundDrawable(new BitmapDrawable(mResources, (Bitmap)null)); 2)按返回键时,让popupWindow dismiss的同时finish当前的activity: 使用PopupWindow(View contentView, int width, int height, boolean focusable)构造方法时,设置其focusable参数为false。 原因是让popupWindow不能获取焦点。焦点在Activity上,返回键就会交给Activity进行处理。
35.用 SpannableStringBuilder处理TextView: SpannableStringBuilder style=new SpannableStringBuilder(str); 36.自定义Adapter继承自BaseAdapter时,ViewHolder使用静态类,非static的ViewHolder会导致ListView在滑动时比较卡。 在manifest.xml中看android:targetSdkVersions是否已设定。例如:要在4.0的平台上测试,而android:targetSdkVersion=13(3.2平台),就会出现EditText缺失边框的现象。删除android:targetSdkVersion标签即可。 40.对EditText,点击屏幕,隐藏软键盘: 对当前Activity的Layout设置id,然后重写onclick方法: InputMethodManagerimm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(),0); 41. android.view.WindowManager$BadTokenException:Unable to add window -- tokenandroid.app.LocalActivityManager$LocalActivityRecord@41226b10 is not valid; isyour activity running? 在Activity或View中,显示Dialog(AlertDialog),导致此错误。 1).如果构造Dialog使用的context是getApplication,改成相应的Activity,在Activity中进行添加view的操作。 2).如果使用了TabActivity(或者TabActivity里面嵌套TabAcitivity),context使用getParent。 42.TextViewi设置图片 textView.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null); 43.Fragment中嵌套Fragment. 如果要使用replace,那么Fragment中嵌套的Fragment的id属性,一定不要和Activity中的指定的Fragment的id属性相同。 否则replace后显示的是Activity中的Fragment 。 44. 使用GridView, 无法居中,右边出现很大的空隙: 1)调整GridView的android:layout_gravity属性为center_horizontal, 使之居中. 2)通常无法居中,是由于item中的元素未居中,确切地说是由于item中的元素偏向左边,导致GridView整体向左边偏,右边出现空隙。设置item中的元素父控件layout_width="match_parent",子控件居中显示即可, android:layout_gravity = center。 45. Toast要放在UI线程中,在非UI线程中不会显示。 46.自定义Dialog布局,设置无标题样式: dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
1)popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());//重要: 点击使其消失,并且不会影响背景
或者调用popupWindow.setFocusable(false);
style.setSpan(new ForegroundColorSpan(Color.argb(255, 12, 170, 218)),0,3,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
mTextView.setText(style);
注意:设置自定义color时,优先调用Color.argb方法(使用Color.rgb可能会出错)。
37. java.lang.RuntimeException: Unable to destroy activity {com.demo.***.MainTabActivity}: java.lang.RuntimeException: Unable to destroy activity {com.demo.***.TabActivity01 }: java.lang.IllegalStateException: Activity has been destroyed
检查Activity的生命周期,对于ondestroy不要放不相关的代码。
38.ListView的item对某个widget进行触摸点击事件:
在item的布局中对相应的widget设置:
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
主要考虑获取焦点的优先级,让widget在默认情况下不获取焦点。
39.EditText没有边框,聚焦时只有底部的边框出现:
dialog.setContentView(view);