Android技术笔记

1、library的activity需要在app的AndroidManifest.xml中声明

2、从一个应用调用另外一个应用的Activity
android:exported="true"表示可以从外面来调用
<activity
android:name="ccom.example.app2.MyActivity"
android:theme="@style/AppTheme"
android:screenOrientation="behind"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true" />

调用的方式
Intent in = new Intent();
in.setClassName("com.example.app2", "com.example.app2.MyActivity");
mContext.startActivity(in);

3、通过反射来判断是否有某个jar包,用于灵活打包某些jar进去
try {
Class<?> class = Class.forName("com.xxxx.xxxx");
return class != null;
} catch (Exception e) {
e.printStackTrace();
return false;
}

4、一些基础的概念知识
drawable value文件夹自动适配各种资源
android的生命周期 onCreate onStart onResume onPause onStop onDestroy onRestart
Intent 显式 隐式 onStartForResult()
Bundle 传递信息
半透明的弹窗和全屏Activity的区别就是一个android:theme
Activity基类的封装 1、日志打印 2、统一管理activity 3、接口封装
Activity的栈 四种 Standard SingleTop SingleTask SingleInstanceTask
打印日志 log.v log.e log.w


android:gravity 文字对齐方式和android:layout_gravity 布局对齐方式

android:layout_weight:这个属性允许我们使用比例的方式来指定控件的大小

android:visibility: visible、 invisible 和 gone

FrameLayout 这种布局没有任何的定位方式,所有的控件都会摆放在布局的左上角,应用于Frame。

5、ListView:
1、自定义适配器
2、convertView判断是否已经存在
3、setTag(viewHolder); // 将ViewHolder存储在View中 不重复去调用findViewById
4、当然图片可以使用弱引用
5、notifyDataSetChanged()
Msg msg = new Msg(content, Msg.TYPE_SENT);
msgList.add(msg);
adapter.notifyDataSetChanged(); // 当有新消息时,刷新
ListView中的显示
msgListView.setSelection(msgList.size()); // 将ListView


6、自定义控件:
LayoutInflater.from(context).inflate(R.layout.title, this);
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);


我们还可以给 ProgressBar 指定不同的样式,刚刚是圆形进度条, 通过 style 属性
可以将它指定成水平进度条,
style="?android:attr/progressBarStyleHorizontal"????


这里需要注意,如果 LinearLayout 的排列方向是 horizontal,内部的控件就绝对不能将
宽度指定为 match_parent,因为这样的话单独一个控件就会将整个水平方向占满, 其他的控
件就没有可放置的位置了。同样的道理,如果 LinearLayout 的排列方向是 vertical,内部的控
件就不能将高度指定为 match_parent


在编写 Android 程序的时候,尽量将控件或布局的大小指定成 match_parent或 wrap_content,如果必须要指定一个固定值,则使用 dp 来作为单位,指定文字大小的时候使用 sp 作为单位


7、制作 Nine-Patch 图片
在 Android sdk 目录下有一个 tools 文件夹,在这个文件夹中找到 draw9patch.bat 文件,我们就是使用它来制作 Nine-Patch 图片的。双击打开之后,在导航栏点击 File→Open 9-patch将 message_left.png 加载进来。


8、碎片( Fragment)
是一种可以嵌入在活动当中的 UI 片段,它能让程序更加合理和充分地利用大屏幕的空间

AnotherRightFragment fragment = new AnotherRightFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.
beginTransaction();
transaction.replace(R.id.right_layout, fragment);
transaction.commit();


可以看到,首先我们给左侧碎片中的按钮注册了一个点击事件,然后将动态添加碎片的
逻辑都放在了点击事件里进行。结合代码可以看出,动态添加碎片主要分为 5 步。
1. 创建待添加的碎片实例。
2. 获取到 FragmentManager,在活动中可以直接调用 getFragmentManager()方法得到。
3. 开启一个事务,通过调用 beginTransaction()方法开启。
4. 向容器内加入碎片,一般使用 replace()方法实现,需要传入容器的 id 和待添加的碎
片实例。
5. 提交事务,调用 commit()方法来完成。
这样就完成了在活动中动态添加碎片的功能

FragmentTransaction 中提供了一个 addToBackStack()方法,可以用于将一
个事务添加到返回栈中,


为了方便碎片和活动之间进行通信,FragmentManager 提供了一个类似于 findViewById()的方法,专门用于从布局文件中获取碎片的实例,代码如下所示:
RightFragment rightFragment = (RightFragment) getFragmentManager()
.findFragmentById(R.id.right_fragment);
调用 FragmentManager 的 findFragmentById()方法,可以在活动中得到相应碎片的实例,然后就能轻松地调用碎片里的方法了。掌握了如何在活动中调用碎片里的方法,那在碎片中又该怎样调用活动里的方法呢?其实这就更简单了,在每个碎片中都可以通过调用 getActivity()方法来得到和当前碎片相关联
的活动实例,代码如下所示:
MainActivity activity = (MainActivity) getActivity();
有了活动实例之后,在碎片中调用活动里的方法就变得轻而易举了。另外当碎片中需要使用 Context 对象时,也可以使用 getActivity()方法,因为获取到的活动本身就是一个 Context对象了。


1. onAttach()
当碎片和活动建立关联的时候调用。
2. onCreateView()
为碎片创建视图( 加载布局)时调用。
3. onActivityCreated()
确保与碎片相关联的活动一定已经创建完毕的时候调用。
4. onDestroyView()
当与碎片关联的视图被移除的时候调用。
5. onDetach()
当碎片和活动解除关联的时候调用。


9、使用限定符
放在layout-large/文件夹里面的布局,大屏幕会自动去调用
屏幕特征 限定符 描述
大小
small 提供给小屏幕设备的资源
normal 提供给中等屏幕设备的资源
large 提供给大屏幕设备的资源
xlarge 提供给超大屏幕设备的资源
分辨率
ldpi 提供给低分辨率设备的资源( 120dpi 以下)
mdpi 提供给中等分辨率设备的资源( 120dpi 到 160dpi)
hdpi 提供给高分辨率设备的资源( 160dpi 到 240dpi)
xhdpi 提供给超高分辨率设备的资源( 240dpi 到 320dpi)
方向
land 提供给横屏设备的资源
port 提供给竖屏设备的资源

使用最小宽度限定符
当程序运行在屏幕宽度大于 600dp 的设备上时,会加载 layout-sw600dp/
activity_main 布局,当程序运行在屏幕宽度小于 600dp 的设备上时,则仍然加载默认的
layout/activity_main 布局

posted on 2016-03-25 17:53  2015xbx  阅读(217)  评论(0编辑  收藏  举报

导航