1.Activity简介
Activity,释义为活动,在Android系统上体现为一个个页面,属于MVC中的V,即VIEW,用于展示界面。Activity是四大组件之一,与用户密切相关,是用户最直观的体会,是一个与用户交互的组件,可以通过setContentView()来设置要引入展示的界面。
2.activity组成
Activityz由代码和布局组成。代码主要是引入xml布局界面,findVIewById找到控件,然后利用代码设置数据或者改变展现形式;
mTransTo = (FlowListBean) getIntent().getSerializableExtra("account_info"); title_left = (TextView) findViewById(R.id.title_left); title_name = (TextView) findViewById(R.id.title_name);
布局在Android中主要体现为xml文件,xml是布局文件,科技将设计好的界面通过控件的排布达到展示的效果,同时可以在编辑器中查看修改,这里体现了解耦的思想,将代码和布局解耦,使得代码中不会都是布局的代码,在原来的java中,new 出一个按钮等等,选择防止位置等等,都是通过代码实现的,使得代码杂乱无章,阅读和维护的成本都增加,这样的方式无疑是一种巨大的进步。
1.xml布局如上图
3.xml中几种比较常用的布局
1.LinearLayout ,线性布局,顾名思义,像线一样直,所以一样要设置方向orientation,有horizontal和vertical,方向为横向的时候则是横着一排,方向为竖向的时候则是竖着一排,并且是安排先后顺序来决定谁在前谁在后的,可以不需要设置id,也能展示,但是可以在代码中就没法找到相关的控件了,如果是固定展示就可以不设置id也没问题。另外一个值得一提的是当设置方向为horizontal的时候,可以设置线性布局里面竖直方向上的位置,但是横向的位置就没效果了,例如android:layout_gravity="center_vertical"设置这个则有效果,而如果是android:layout_gravity="center_horizontal",就没什么效果了;如果是设置vertical,则是相对横向反过来
2.RelativeLayout ,相对布局,没一个都需要设置id,因为是相对的,你需要根据id来确定没一个控制,才能设置谁相对谁的位置,例如:
<RelativeLayout android:layout_width="match_parent" android:layout_height="60dp" android:layout_gravity="center_horizontal" android:layout_marginLeft="@dimen/all_atymargin_left_right" android:layout_marginRight="@dimen/all_atymargin_left_right" android:orientation="horizontal"> <!--<TextView--> <!--android:id="@+id/login_username"--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--android:layout_centerVertical="true"--> <!--android:padding="5dp"--> <!--android:textSize="18sp"--> <!--android:text="@string/loginaty_username"/>--> <ImageView android:id="@+id/login_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:padding="5dp" android:src="@mipmap/login_aty_user" /> <ImageView android:id="@+id/login_more" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:clickable="true" android:onClick="onClickEvent" android:padding="@dimen/dp_10" android:src="@mipmap/more" /> <EditText android:id="@+id/login_username_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_toLeftOf="@id/login_more" android:layout_toRightOf="@id/login_username" android:background="@drawable/edit_bg" android:hint="@string/loginaty_username_hint" android:maxLength="11" android:padding="5dp" android:textColorHint="#60000000" android:textSize="@dimen/loginaty_content_size" /> <TextView android:id="@+id/loginaty_username_line" android:layout_width="match_parent" android:layout_height="1dp" android:layout_alignParentBottom="true" android:layout_marginLeft="37dp" android:background="@color/line_color" android:visibility="gone" /> </RelativeLayout>
相对布局的优势在于布局层级会大大降低。
3.FramLayout ,帧布局
<FrameLayout android:layout_width="match_parent" android:layout_height="100dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:src="@mipmap/ic_launcher"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:text="我试试"/> </FrameLayout>帧布局多用于控件重叠,比较好用
4.TableLayout,表格布局,可以得到类似表格的界面
4.Activity跳转方式
1.按类别进行跳转
public class SkipActivityUtils { /** * 用于Activity的跳转 * * @param mActivity * 原Activity * @param mClass * 待跳转Activity */ public static void skipActivity(Activity mActivity, Class mClass) { Intent intent = new Intent(mActivity, mClass); mActivity.startActivity(intent); } /** * 用于Activity的跳转,带请求码 * * @param mActivity * 原Activity * @param mClass * 待跳转Activity */ public static void skipActivity(Activity mActivity, Class mClass, int requestCode) { Intent intent = new Intent(mActivity, mClass); mActivity.startActivityForResult(intent, requestCode); } /** * 用于Activity的跳转 * * @param mActivity * 原Activity * @param mClass * 待跳转Activity */ public static void skipActivityWithData(Activity mActivity, Class mClass, Bundle mBundle) { Intent intent = new Intent(mActivity, mClass); intent.putExtras(mBundle); mActivity.startActivity(intent); } /** * 用于Activity的跳转,带参数,带请求码 * * @param mActivity * 原Activity * @param mClass * 待跳转Activity */ public static void skipActivityWithData(Activity mActivity, Class mClass, Bundle mBundle, int requestCode) { Intent intent = new Intent(mActivity, mClass); intent.putExtras(mBundle); mActivity.startActivityForResult(intent, requestCode); ; } }2.按action跳转
代码中:
Intent i = new Intent("zxg.test"); this.startActivity(i);
清单文件中:
3.uri转化,多数人系统规定类型跳转<activity android:name="com.android.dialog.MyDialog"> <intent-filter> <!--配置action路径--> <action android:name="zxg.test" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
/** * 拨打电话 */ public static void callDial(Context context, String phoneNumber) { context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber))); } /** * 发送短信 */ public static void sendSms(Context context, String phoneNumber, String content) { Uri uri = Uri.parse("smsto:" + (TextUtils.isEmpty(phoneNumber) ? "" : phoneNumber)); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", TextUtils.isEmpty(content) ? "" : content); context.startActivity(intent); }
/** * 安装指定路径下的Apk */ public static void installApk(String filePath, Context mActivity) { Intent installIntent = new Intent(); installIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); installIntent.setAction(Intent.ACTION_VIEW); installIntent.setDataAndType(Uri.fromFile(new File(filePath)), "application/vnd.android.package-archive"); mActivity.startActivity(installIntent); }
//跳转网页 Uri uri = Uri.parse("http://www.baidu.com"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);
等等