Android 之小技巧
2016-03-23 18:18
495 查看
小技巧,不足为专题内容
参见 /article/4602874.html
请注意这个时候设置TextView的Gravity为CENTER_VERTICAL,因为下面链接中提到的自定义组件其实就是将画布开始draw的位置向中间移动了(业绩leftDrawable和text一起从中间开始draw)。如果textView被设置为横向居中,那么最后结果textView会跑到右边。
需要有padding的分割线。
实现:
仅支持api17及以上,17以下将上面的代码拷贝一份到工具类中。
如果插件化加载中使用aapt动态调整资源的packageId,可能会出问题。因为generateViewId的本质是将package从01开始计数自增,保证和res中的资源id不一样。
比如我现在现在想debug api17的源码,但是工程里配置是compileSdkVersion 23,所以得debug跳到的源码也是api23的,但是又不能改变compileSdkVersion,how to 弄?
1.先编译
2.去sdk的源码sources目录,把17的目录名改成23
mv android-23 23-temp
mv android-17 android-23
3.然后debug就能在17的源码打断点了
1、android:divider=”@drawable”
2、android:showDividers = “middle|end|beginning|none”
middle 在每一项中间添加分割线
end 在整体的最后一项添加分割线
beginning 在整体的最上方添加分割线
none 无
但是,这种属性只有Android3.0以上才支持。
兼容3.0以下版本,需要引用android-support-v7-appcompat.jar
使用android.support.v7.widget.LinearLayoutCompat,用法和LinearLayout一样
TextView的drawableLeft与文本一起居中显示
原始的TextView设置了LeftDrawable后,如果TextView的宽度是MATCH_PARENT,LeftDrawable是无法和TextView中的text一起居中的,而是在左边。参见 /article/4602874.html
请注意这个时候设置TextView的Gravity为CENTER_VERTICAL,因为下面链接中提到的自定义组件其实就是将画布开始draw的位置向中间移动了(业绩leftDrawable和text一起从中间开始draw)。如果textView被设置为横向居中,那么最后结果textView会跑到右边。
添加子view到LinerLayout中,子view的layout参数被去掉了。
使用addView(View view ,index ,LayoutParams) 来重新设置子view在父布局中的布局参数。什么条件下使用layer-list
故名思意,多图层表。使用场景:
需要多个图片资源进行重叠需要有padding的分割线。
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:bottom="8.8dp" android:top="8.8dp"> <shape android:shape="rectangle"> <solid android:color="@color/hotel_flight_divider_color"></solid> <size android:width="1dp" android:height="1dp"></size> </shape> </item> </layer-list>
实现:
可以不用 Context 也能获取屏幕密度
1.Resources.getSystem().getDisplayMetrics().density 可以不用 Context 也能获取屏幕密度/** * Return a global shared Resources object that provides access to only * system resources (no application resources), and is not configured for * the current screen (can not use dimension units, does not change based * on orientation, etc). */ public static Resources getSystem() { synchronized (sSync) { Resources ret = mSystem; if (ret == null) { ret = new Resources(); mSystem = ret; } return ret; } }
为java中创建的view设置资源id
2.new 出来的 View 可以用 View.generateViewId() 生成 id,系统保证唯一。private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); public static int generateViewId() { for (;;) { final int result = sNextGeneratedId.get(); // aapt-generated IDs have the high byte nonzero; clamp to the range under that. int newValue = result + 1; if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. if (sNextGeneratedId.compareAndSet(result, newValue)) { return result; } } }
仅支持api17及以上,17以下将上面的代码拷贝一份到工具类中。
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1){ return Utils.generateViewId(view); }else{ return view.generateViewId(); }
如果插件化加载中使用aapt动态调整资源的packageId,可能会出问题。因为generateViewId的本质是将package从01开始计数自增,保证和res中的资源id不一样。
当compileSdkVersion和运行机版本不match时如何正确断点
debug低版本源码比如我现在现在想debug api17的源码,但是工程里配置是compileSdkVersion 23,所以得debug跳到的源码也是api23的,但是又不能改变compileSdkVersion,how to 弄?
1.先编译
2.去sdk的源码sources目录,把17的目录名改成23
mv android-23 23-temp
mv android-17 android-23
3.然后debug就能在17的源码打断点了
clipChildren=”false”
让属性动画穿过布局边界LinearLayout 分隔线divider
LinearLayout有两个属性1、android:divider=”@drawable”
2、android:showDividers = “middle|end|beginning|none”
middle 在每一项中间添加分割线
end 在整体的最后一项添加分割线
beginning 在整体的最上方添加分割线
none 无
但是,这种属性只有Android3.0以上才支持。
兼容3.0以下版本,需要引用android-support-v7-appcompat.jar
使用android.support.v7.widget.LinearLayoutCompat,用法和LinearLayout一样
相关文章推荐
- Andrroid四大组件之Activity生命周期
- Android控件之Toolbar + DrawerLayout的使用
- Android项目:手机安全卫士(16)—— 复杂 ListView
- Android自动化构建之Ant多渠道打包实践(下)
- iOS与Android的音频互通
- Android序列化:Parcelable/Serializable
- Android的webview加载本地html、本apk内html和远程URL
- android基础---->传感器的使用
- Android之Handler分享
- Android Activity生命周期相关问题
- 【Android】【绘图】Scroller
- Android系统源码学习
- Android 零碎知识点整理
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android 中LayoutInflater的使用!
- Android官方开发文档Training系列课程中文版:添加ActionBar之ActionBar浮层效果
- Android SQLiteDatabase
- Miko Android自学之路 WifiDirect中文最强详解,如何传输数据,如何设置GroupOwener,如何设置客户端以及服务器端
- Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
- Android HAL实例解析