第七天
include
include标签常用于将布局中的公共部分提取出来供其他layout共用,以实现布局模块化,这在布局编写方便提供了大大的便利。
include可以达到重用布局的效果。但是如果不设置位置信息比较难看,要想设置include标签的布局,必须先设置宽高.
如果id起冲突了,那么默认本layout的控件id为响应id,include导入的控件id会被覆盖掉
<!--include可以达到重用布局的效果。但是如果不设置位置信息比较难看要想设置include标签的布局,必须先设置宽高.
如果id起冲突了,那么默认本layout的控件id为响应id,include导入的控件id会被覆盖掉-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击没反应"/>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/button"
android:layout_marginLeft="20px"
android:text="站长之家友情提供"/>
</RelativeLayout>
<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/foollayout"
android:layout_alignParentBottom="true"/>
merge
merge标签可用于两种典型情况
merge标签在UI的结构优化中起着非常重要的作用,它
可以删减多余的层级,优化UI。
merge多用于替换FrameLayout或者当一个布局包含另
一个时,标签消除视图层次结构中多余的视图
组。例如你的主布局文件是相对布局,引入了一个相对布
局的include,这时如果include布局使用的RelativeLayout
就没意义了,使用的话反而减慢你的UI表现。这时可以使
用“merge/>”标签优化。
ViewStub
viewstub标签同include标签一样可以用来引入一个外部布局,不同的是,viewstub引入的布局默认不会扩张,即既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存。
viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等。
**java代码控制Viewstub显示的方法:inflate();
注意:ViewStub目前不支持merge标签**
自定义标题栏
如何使用自定义标题栏?
使用自定义标题栏遵循以下步骤:
一、自定义标题栏布局
二、在Activity中使用该布局
三、调整style使该布局和标题栏契合
四、让Activity使用该样式
1.自定义标题栏的布局文件
注意:在使用自定义标题栏时,首先需要创建一个标题栏的xml文件,并保证它的根标签是RelativeLayout
2.然后再在MainActivity中声明使用自定义的标题栏
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//此行代码必须加在setContentView之前,取消系统标题栏。
this.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);
//设置当前activity使用自定义标题栏
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title_layout);
注:如果在Androidstudio中切记把AppCompatActivity切换成Activity,这样才可以能运行
3.在Style属性中声明我们自定义的标题栏与默认的标题栏是否切合
<!-- 在这里创建自己的style,用于系统主题的使用-->
<style name="myTitleBar" parent="android:Theme">
<!--设置原始标题栏的高度-->
<item name="android:windowTitleSize">50dp</item>
<!--设置新的标题栏完全原始标题栏的左右两侧-->
<item name="android:padding">0dp</item>
</style>
4.让我们的Activity使用该主题
在Manifest.xml中在< activity中填上一句theme=”@style/myTitleBar”
如果是在< application中填上一句theme=”@style/myTitleBar”那么所有的activity都会改变标题栏
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:theme="@style/myTitleBar"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>