目录
app包中的fragment和v4包中fragment的使用区别
ScrollView中嵌套ListView,ListView显示不全的问题
Dialog背景设置tip
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
...
setContentView(view);
设置背景透明,布局文件中设置的背景(如:shape里的圆角设置)才显现。
RecyclerView删除刷新
// delete data and refresh list
// currentPosition:删除数据的id
datas.remove(currentPosition);
adapter.notifyItemRemoved(currentPosition);
if (currentPosition != datas.size()) {
adapter.notifyItemRangeChanged(currentPosition, datas.size() - currentPosition);
}
设置ImageView宽度固定,高度按比例缩放适应
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
透明度设置
代码设置:button.getBackground().setAlpha(128)。setAlpha()的值0~255,数字越大越不透明。
布局设置:anroid:alpha属性,值范围0~1,数字越大,越不透明。1表示完全不透明,0表示完全透明。
EditText、引用字体文件
1.通常情况下,输入number一类的请求数据,加上一个范围的判断,超过范围,让用户重新输入
2.添加光标:edt_num.requestFocus();
3. string转int型时,最好加上 try{}catch{} 判断,以防 NumberFormatException 错误
try {
} catch (NumberFormatException e){
e.printStackTrace();
}
4.给EditText设置输入长度:android:maxLength="6"
5.引用字体设置TextView
TextView appname = findViewById(R.id.appname);
Typeface typeface = Typeface.createFromAsset(getAssets(), "jianti.ttf");
appname.setTypeface(typeface);
"jianti.ttf":即为引用的字体,放入新建的assets包
/*--------------------------------------------------------------------------------------------------------*/
app包中的fragment和v4包中fragment的使用区别
2016/7/27 Wednesday morning
1、版本问题
app包下的是版本3.0以后出现的,支持高版本;v4包下的兼容了3.0以下的,可以兼容到版本1.6
2、使用<fragment>标签的问题
两者都可以使用<fragment>标签,但是v4包下的在使用时activity必须继承自FragmentActivity,而app包下则可以继承Activity
3、FragmentManager
继承Activity用getFragmentManager,继承FragmentActivity用getSupportFragment
Java基础 equals 和 “==”
2016/8/8 Monday morning
a.equals(b) à 是判断字符串a和b是否相等
a == b à 是判断a和b是否是同一个变量,即系统为这两个变量是否是分配的同一块内存
ScrollView中嵌套ListView,ListView显示不全的问题
2016/8/30 Tuesday afternoon
计算ListView的高度
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
在ListView设置了adapter后,调用该方法,且listview的item设置必须是LinearLayout,因为其他layout没有重写onMeasure(),所以会在onMeasure()时抛出异常
截取字符串
2016/9/9 Friday morning
e.g.
"item": "[\"act\",\"obj\"]"
String item = data.get(position).getItem();
item = item.replace("[", "").replace("]", "").replace("\"", "");
String[] arrayStr = new String[]{};
arrayStr = item.split(",");
/* 输出字符数组的值 */
for (String s : arrayStr) {
if (s.equals("act")) {
mHolder.person_act.setText("人员活动");
} else if (s.equals("obj")) {
mHolder.obje.setText("物品");
} else if (s.equals("case")) {
mHolder.casse.setText("案事件");
} else if (s.equals("vedio")) {
mHolder.vedio.setText("视频监控");
}
}
用gson解析该类型数据
String item = "[\"case\",\"vedio\"]";
List<String> itemList = new Gson().fromJson(item,new TypeToken<List<String>>(){}.getType());
for (int i=0; i<itemList.size(); i++){
Log.i("bz item","---------------- "+itemList.get(i));
}
ListView中item点击事件失效
2016/10/31 Monday morning
Item点击事件失效一般是因为布局中含有button、imagebutton等控件
解决方法:
在item的根布局上添加descendantFocusability="blocksDescendants"即可
descendantFocusability有三个属性:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常情况下我们用到第三个属性
还有解决方法:
将button改为textview控件,imagebutton改为image。
在Android中,点击屏幕以后点击事件会根据你的布局来分配的,当你的ListView中还有button,点击事件第一优先分配给了ListView里的button,所以item的点击事件就失效了。
Button点击事件失效问题
2017/3/3 Friday afternoon
到现在还会被这个问题所难倒也是醉了
原因:
未得到控件
未注册点击事件(setOnClickListener)
Scrollview布局覆盖了button控件
通常点击事件失效是因为前两点,今日所遇到的正是由第3个原因所造成,ScrollView布局不知何时将我的button覆盖了,汗颜
Activity的四种launchMode
2018/5/2 Wednesday morning
Activity一共有以下四种launchMode:
1.Standard(默认的启动模式):每次跳转系统都会在task生成一个新的Activity实例,并且放于栈结构顶部,当我们按下后退键时才能看到原来的Activity实例。
这就是standrad启动模式,不管有没有已存在实例,都生成新的实例。
2. singleTop:如果发现有对应的activity位于栈顶,则重复利用不生成新的实例,反之若对应的activity不是位于栈顶,则重新生成新的实例。
3.singleTask:standard如果发现有对应的activity实例,则使此activity实例之上的其他activity实例统统出栈,使此activity成为栈顶对象,显示到幕前。
4.singleInstance:这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。
去掉Button默认内边距
2018/5/30 Wednesday morning
android:minHeight="0dp"
android:minWidth="0dp"