对Android提供的基本布局控件进行组合,可以实现一些相对复杂的效果,下面需要实现的效果如图:
header效果:
header.xml文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/title_bar"> <Button android:id="@+id/header_button_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@android:drawable/ic_media_rew" /> <Button android:id="@+id/header_button_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@android:drawable/ic_media_ff" /> <TextView android:id="@+id/header_text_center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/button1" android:layout_centerInParent="true" android:text="文本信息" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout>
footer效果:
footer.xml文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/title_bar"> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center"> <Button android:id="@+id/footer_a" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/alert_light_frame" android:text="A" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="1" android:gravity="center"> <Button android:id="@+id/footer_b" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/alert_light_frame" android:text="B" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="1" android:gravity="center"> <Button android:id="@+id/footer_c" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/alert_light_frame" android:text="C" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="1" android:gravity="center"> <Button android:id="@+id/footer_d" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/alert_light_frame" android:text="D" /> </LinearLayout> </LinearLayout>
activity_include.xml文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#cccccc"> <LinearLayout android:id="@+id/top" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" > <include layout="@layout/header" /> </LinearLayout> <LinearLayout android:id="@+id/middle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/top" android:layout_above="@+id/bottom"> </LinearLayout> <LinearLayout android:id="@+id/bottom" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <include layout="@layout/footer" /> </LinearLayout> </RelativeLayout>
说明:
- RelativeLayout内部分成top,middle,bottom三个LinearLayout,分别用于添加header,自定义布局,footer;
- top填充顶部,bottom填充底部,middle填充剩余区域;
- include标签导入外部layout文件;
下面是4个测试Activity的布局文件,基本类似,中间区域放置一个按钮,代码如下activity_a.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <Button android:id="@+id/activity_a_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="A" /> </LinearLayout>
剩下的activity_b.xml,activity_c.xml,activity_d.xml就不一一贴出了!:)
AActivity的代码如下:
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; public class AActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); findViewById(R.id.activity_a_button).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(AActivity.this, "This is activity a!", Toast.LENGTH_SHORT).show(); } }); } }
说明:
- 当点击按钮后,显示当前Activity信息;
- 其它BActivity,CActivity,DActivity代码类似,不一一贴出了!:)
看看IncludeActivity的主要代码:
import android.app.ActivityGroup; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class IncludeActivity extends ActivityGroup implements OnClickListener { // Header private Button leftButtonHeader; private Button rightButtonHeader; private TextView centerTextHeader; // Footer private Button aButtonFooter; private Button bButtonFooter; private Button cButtonFooter; private Button dButtonFooter; private LinearLayout middleLayout; private View middleView; private LayoutParams layoutParams; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_include); setTitle("测试"); // 获得Header部分的View引用 leftButtonHeader = (Button) findViewById(R.id.header_button_left); rightButtonHeader = (Button) findViewById(R.id.header_button_right); centerTextHeader = (TextView) findViewById(R.id.header_text_center); // 获得Footer部分的View引用 aButtonFooter = (Button) findViewById(R.id.footer_a); bButtonFooter = (Button) findViewById(R.id.footer_b); cButtonFooter = (Button) findViewById(R.id.footer_c); dButtonFooter = (Button) findViewById(R.id.footer_d); // 设置点击事件监听器 leftButtonHeader.setOnClickListener(this); rightButtonHeader.setOnClickListener(this); aButtonFooter.setOnClickListener(this); bButtonFooter.setOnClickListener(this); cButtonFooter.setOnClickListener(this); dButtonFooter.setOnClickListener(this); layoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); // 获得自定义View的父容器 middleLayout = (LinearLayout) findViewById(R.id.middle); // 获得自定义View,并添加到当前布局 middleView = getLocalActivityManager().startActivity(null, new Intent(this, AActivity.class)).getDecorView(); middleLayout.addView(middleView, layoutParams); } @Override public void onClick(View v)getLocalActivityManager { switch (v.getId()) { case R.id.header_button_left: Toast.makeText(this, "左", Toast.LENGTH_SHORT).show(); break; case R.id.header_button_right: Toast.makeText(this, "右", Toast.LENGTH_SHORT).show(); break; case R.id.footer_a: Toast.makeText(this, "A", Toast.LENGTH_SHORT).show(); middleLayout.removeAllViews(); middleView = getLocalActivityManager().startActivity(null, new Intent(this, AActivity.class)).getDecorView(); middleLayout.addView(middleView, layoutParams); break; case R.id.footer_b: Toast.makeText(this, "B", Toast.LENGTH_SHORT).show(); middleLayout.removeAllViews(); middleView = getLocalActivityManager().startActivity(null, new Intent(this, BActivity.class)).getDecorView(); middleLayout.addView(middleView, layoutParams); break; case R.id.footer_c: Toast.makeText(this, "C", Toast.LENGTH_SHORT).show(); middleLayout.removeAllViews(); middleView = getLocalActivityManager().startActivity(null, new Intent(this, CActivity.class)).getDecorView(); middleLayout.addView(middleView, layoutParams); break; case R.id.footer_d: Toast.makeText(this, "D", Toast.LENGTH_SHORT).show(); middleLayout.removeAllViews(); middleView = getLocalActivityManager().startActivity(null, new Intent(this, DActivity.class)).getDecorView(); middleLayout.addView(middleView, layoutParams); break; default: break; } } }
说明:
- middleLayout在重新添加View的时候,要先清除已有View,即:middleLayout.removeAllViews();
- 通过getLocalActivityManager获得LocalActivityManager,然后在获得某个Activity对应的View,并添加到当前布局中;
- 虽然AActivit的UI在IncludeActivity中显示,但是有关AActivity的UI操作和逻辑代码只要在AActivity中进行编写就可以了;
- manifest文件中添加相关Activity的声明;
- 关于添加其它Activity的UI到当前Activity的代码没有做性能测试,可能需要做调整,包括连续点击A,B,C,D按钮时,控制View是否添加等;
其它效果图片:
多说一句:主要内容是布局效果处理和ActivityGroup使用!:)记录点点滴滴,以备不时之需!=^_^=
相关推荐
Android布局文件的属性值解析说明: 1 android:id [为控件指定相应的ID] 2 android:text [指定控件当中显示的文字 需要注意的是 这里尽量使用strings xml文件当中的字符串] 3 android:gravity [指定View组件的对齐...
android 布局生成图片,封装工具类 ,简单实用,viewgroup生成图片分享微信,快速转化
android 布局 android 布局android 布局android 布局
Android布局显示模板加载,空,错误等状态
android 布局的详细分析 android 布局的详细分析 android 布局的详细分析
Android布局高级.doc
android布局属性详解.全面讲解各种技术。值得学习。
android 布局别名的应用
Android布局控件之RelativeLayout详解
对初次学习Android布局的人有很大的帮助更好的了解属性
LinearLayout 线性布局 控制组件 横向 或者 纵向 排列 RelativeLayout 相对布局 子组件的位置总是相对兄弟组件,父容器来决定的 FrameLayout 帧布局、框架布局 创建一个空白区域, 一个区域成为一帧 TableLayout 表格...
设计Android应用程序的界面经常用到xml格式的布局文件。一个布局文件的作用是描述了: - 界面包含哪些控件(也叫组件或视图;示例有按钮,下拉框); - 控件之间的位置关系; - 如何显示界面的整体外观和各个...
xamarin.android 布局文件自动提示功能
android布局单位sp,dp,pt,px的用法和区别。
安卓布局讲解。各个控件的讲解,及其属性。代码展示。 1 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5...
Android布局或控件显示网络图片教程源码,文章详情访问:http://blog.csdn.net/ausboyue/article/details/52120649
android不同的布局资源介绍,包括LinearLayout、RelativeLayout等
android最全的布局属性总结,各种Layout如linearlayout ,relativeLayout,frameLayout,各种widget属性说明
android布局属性,在平时开发中不断总结的,很值得参考
对于android常用的布局管理器的代码练习,主要以xml文件为主,也有部分的Activity的操作!