Android一些琐碎是知识点(不定时更新)

时间:2021-08-28 09:55:10

一、@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中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 

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,当触摸某个控件时,会先将焦点移动到被触摸的控件上,然后需要再触摸该控件才会响应单击事件