一、@id与@+id的区别
@id : 引用现有的资源,类似@string 这样的做法易于统一管理。
具体用法:
<resources>
<item name="topview" type="id"/>
<item name="viewpager" type="id"/>
<item name="indicator" type="id"/>
<item name="innerscrollview" type="id"/>
<item name="descriptionview" type="id"/>
</resources>
@+id :如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。变量名就
是“/”后面的值,例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名
的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。
二、用隐式intent注意的问题
1.如果你定义了其他的category,记得加上<category android:name="android.intent.category.DEFAULT" /> 在addCategory可以不加入它,因为默认添加的
三、onActivityResult的用法
常见作用,一般是返回数据给启动它的Activity
流程:1. startActivityForResult(intent, 2);//启动你的Activity,2是请求参数,可以换其他的。用来返回时做requestCode判断的,一一对应的。
2. Intent intent = new Intent();
intent.putExtra("data", "hellokitty");
setResult(RESULT_OK, intent);//返回数据,RESULT_OK可以换其他的,用来做resultCode判断,一一对应的。
3.@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode){
case 2:
if(resultCode == RESULT_OK){
String resultData = data.getStringExtra("data");
Toast.makeText(this, resultData, Toast.LENGTH_SHORT).show();
}
break;
}
}
基本流程就这样,至于传什么数据,再封装就好了
四、启动活动的最佳方法
启动代码写在你要启动活动中,用一个方法封装,参数就是你要传的参数。
如:public class SecondActivity extends Activity{
public static void actionStart(Context context,String data1.String data2){
Intent it = new Intent(context,SecondActivity.class);
intent.putExtra("param1",data1);
....
context.startActivity(intent);
}
}
五、引入布局
<include layout="@layout/title" />
六、透明度百分比转16进制算法
255*透明度百分比的结果转换为16进制即可,计算的有小数的,进一位取整。
如30% 255*30% = 76.5 -->77 77转16进制为4D
七、Button去掉阴影
android:stateListAnimator="@null"
八、布局文件自定义控件自定义属性
xmlns:nineGridLayout="http://schemas.android.com/apk/res/com.yiban1314.yiban" (后面是应用完整包名)
九、仅仅修改桌面图标或者名称
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_icon_merry"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:label,Android:icon, android:theme">//这很关键
十、invalidate()与postInvalidate()区别
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。
十一、软键盘的显示和隐藏
private InputMethodManager imm;
imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
显示:imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
隐藏:imm.hideSoftInputFromWindow(et_comment.getWindowToken(), 0);
十二、控件获取焦点
Android:focusableInTouchMode属性设置为true,当触摸值设为ture,当触摸某个控件时,会先将焦点移动到被触摸的控件上,然后需要再触摸该控件才会响应单击事件