1、src
编写java代码的地方
2、gen
系统的资源文件标识符,不需要程序员维护,系统自动生成
3、assets
原生资源文件,通常是方式html静态网页和视频声音资源文件。
4、bin
表示生成.apk的一个目录,可以直接按装在手机设备上
5、libs
表示使用第三方jar包。
6、res
1、drawable-XX
2、layout布局文件:布局设计器
3、menu菜单
4、values:放置手机用户界面的描述说明,包含文字等。国际化的使用等
7、AndroidManifest.xml清单文件
2. 线性布局
1.比重
只有线性布局才能设置比重。
通过 android:layout_weight="1" 设置比重。
2. 方向
如果 android:layout_width="0dp" 表示是水平方向定义的,android:layout_height="0dp"则表示是垂直定义的。
一般是设置android:weight属性的时候才使用,如果你的布局是按水平布局,设置控件比例,就设置android:layout_width=“0dp”然后就可以自己按照你所设置的比例进行显示,如果是竖直布局的话,设置控件比例,android:layout_height=“0dp”。
3. 布局性能优化
1. 布局重用方法一 <include>
如果有一布局要在多个地方使用,可以把它定义在一个 .xml 文件当中,然后用 <include> 标签添加进去。
<span style="font-family:Microsoft YaHei;"><include
layout="@layout/button"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/button"
/></span>
2. 布局重用方法二 <merge>如果定义了两个button,而这两个button在别的布局中也要用到,可以把它定义在一个单独的.xml文件当中。
这个文件在定义时,layout中选择 merge标签:
<span style="font-family:Microsoft YaHei;"><?xml version='1.0' encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/login"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login" />
<Button
android:id="@+id/reset"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reset" />
</merge></span>
使用merge可以减少 布局的层次。使用的时候也是用 <include>添加,同上面一样。
4. Dialog与Toast封装
封装一种自定义的AlertDialog 和 Toast.
public class CustomDialog {
private AlertDialog.Builder builder;
private Context context;
public CustomDialog(Context context) {
this.context = context;
}
public void createDialog(String buttontext, String title, String message,
final CallBack callBack) {
builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton(buttontext, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
callBack.isConfirm(true);
}
});
builder.create().show();
}
public interface CallBack {
public void isConfirm(boolean flag);
}
public void createToasts(String message,LayoutInflater layoutInflater) {
// Toast.makeText(context, message, Toast.LENGTH_LONG).show();
View view = layoutInflater.inflate(R.layout.toast, null);
TextView textView = (TextView)view.findViewById(R.id.text);
textView.setText(message);
Toast toast = new Toast(context);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(view);
toast.show();
}
}
这里定义了一个内部接口,接口定义了一个isConfirm方法,含有一个 flag 变量,用来记录是否按下 确定按钮。在MainActivity中调用它们:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
CustomDialog dialog = new CustomDialog(MainActivity.this);
dialog.createDialog("确定", "提示", "您确定要删除吗?", new CallBack() {
public void isConfirm(boolean flag) {
System.out.println("----->>" + flag);
if (flag) {
//dosomething.....判断执行业务逻辑
}
}
});
}
});
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
CustomDialog dialog = new CustomDialog(MainActivity.this);
dialog.createToasts("网络有有异常!!",getLayoutInflater());
}
});
}
Dialog 的Theme:AlertDialog的样式修改
1. Android的对话框有两种:PopupWindow和AlertDialog。
它们的不同点在于:AlertDialog的位置固定,而PopupWindow的位置可以随意
AlertDialog是非阻塞线程的,AlertDialog弹出的时候,后台可是还可以做其他事情的哦。
而PopupWindow是阻塞线程的, 这就意味着在我们退出这个弹出框之前,程序会一直等待
PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件。具体如下
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
LayoutInflater layoutInflater = LayoutInflater.from(this);
View popupWindow = layoutInflater.inflate(R.layout.popup, null);
5. 如何设置对话框的宽度和高度