第一行代码 第三章 引入布局和自定义控件
2017-06-27 00:55
260 查看
1、引入布局方式
此种方式只是解决了重复编写相同布局代码的问题。如果布局中存在对控件要求能够响应事件,那还是要在每个活动中为这些控件单独编写事件注册的代码,这种情况就需要用自定义控件的方式来解决。
2、自定义控件方式
动态加载布局方式:LayoutInflater.from(context).inflate(R.layout.title, this);
inflate()接收两个参数:
第一个参数是想要加载的布局文件的id;
第二个参数是给加载好的布局再添加一个父布局,即TitleLayout
布局中添加自定义控件的方式,需要指明控件的完整类名,即包名不能省略。
// title.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#000" android:orientation="horizontal"> <Button android:id="@+id/btnBack" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:background="@drawable/back"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:layout_gravity="center" android:layout_margin="5dp" android:text="Title Text" android:textSize="24sp" android:textColor="#fff"/> <Button android:id="@+id/btnEdit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:background="@drawable/editor"/> </LinearLayout>
// main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.sky.uicustomviews.MainActivity"> <!-- 引入title布局 --> <include layout="@layout/title" /> <Button android:id="@+id/btnStartSecondActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="start second activity" /> </LinearLayout>
// second.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_second" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.sky.uicustomviews.SecondActivity"> <!-- 引入title布局 --> <include layout="@layout/title" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:gravity="center" android:layout_weight="1" android:text="Welcome to Second UI"/> </LinearLayout>
// MainActivity public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.hide(); } Button btnStartSecondActivity = (Button)findViewById(R.id.btnStartSecondActivity); btnStartSecondActivity.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); } }
// SecondActivity public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); ActionBar actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.hide(); } } }
此种方式只是解决了重复编写相同布局代码的问题。如果布局中存在对控件要求能够响应事件,那还是要在每个活动中为这些控件单独编写事件注册的代码,这种情况就需要用自定义控件的方式来解决。
2、自定义控件方式
// TitleLayout继承LinearLayout ,让它成为自定义的标题栏控件 public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button btnBack = (Button)findViewById(R.id.btnBack); btnBack.set b6a8 OnClickListener(new OnClickListener() { @Override public void onClick(View view) { ((Activity)getContext()).finish(); } }); Button btnEdit = (Button)findViewById(R.id.btnEdit); btnEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getContext(), "click edit button", Toast.LENGTH_SHORT).show(); } }); } }
动态加载布局方式:LayoutInflater.from(context).inflate(R.layout.title, this);
inflate()接收两个参数:
第一个参数是想要加载的布局文件的id;
第二个参数是给加载好的布局再添加一个父布局,即TitleLayout
// 修改main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.sky.uicustomviews.MainActivity"> <!-- <include layout="@layout/title" /> --> <com.sky.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btnStartSecondActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="start second activity" /> </LinearLayout>
修改second.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_second" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.sky.uicustomviews.SecondActivity"> <!-- <include layout="@layout/title" /> --> <com.sky.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:gravity="center" android:layout_weight="1" android:text="Welcome to Second UI"/> </LinearLayout>
布局中添加自定义控件的方式,需要指明控件的完整类名,即包名不能省略。
相关文章推荐
- 第一行代码3.2-创建自定义控件
- 【第一行代码-Android】学习(一)及在studio的迁移(2)创建活动及布局
- 安卓第一行代码之百分比布局PercentFrameLayout/PercentRelativeLayout
- <android>第一行代码第三章源码整理
- android第一行代码二刷 第三章
- android第一行代码 第三章 常用基础控件
- 第一行代码笔记,第三章----UI的点滴
- 第一行代码 第三章
- 第一行代码第二版(郭霖著)笔记之第三章(UI开发的点点滴滴)
- 《第一行代码》第二版 学习总结6 引入布局和自定义控件
- 自定义控件——第一行代码3.4.2
- android第一行代码-6.自定义控件的实现
- 《Android 第一行代码之百分比布局》
- 第一行代码 第三章 RecyclerView
- 第一行代码 3.4.2 创建自定义控件 章节中初上手出项的下载完成后闪退问题和自定义控件无反应问题
- 4.2 自定义控件 之 自定义属性与引入布局
- 读书笔记 第一行代码 第三章UI开相关
- 自定义控件——第一行代码3.4.2
- 第一行代码3.3-详解四种基本布局
- 安卓开发之引入布局中自定义控件、OnDraw()绘图