android开发学习笔记系列(2)-android应用界面编程
前言
本篇博客将会简要介绍andriod开发过程中的一些界面元素和编程的实现,我将大家走进安卓的XML世界,当然可能会涉及到java代码,当然本文主要是介绍XML文件的界面布局。
那么我们的XML存在哪里呢?很简单,就在资源文件里面,什么?你不知道资源文件是哪个?拜托,打开项目文件,看见res,那么这个文件低下就是我们的资源文件了!哇哦,那么我们在这上面编程吗?NO,我基本上把逻辑都写在src文件下的.java文件!
如何使用API文档
在开发的时候,我们最需要知道的就是如何使用API啦,有人老喜欢去百度啦,那么告诉你,这样不好!我们其实有现成的,你为何不用呢?
看,在你的SDK下载的文件夹下有docs文件夹,打开它,直接点击index,那么你就可以直接读API帮助文档啦!
注意,我们的帮助文档是英文的,而且你会发现在你在上网的时候,你的帮助文档非常之卡顿,甚至加载不出来,那是因为它在向官网寻求请求,但是google被封,你懂的!这不是坑爹吗?不用着急!英文不好,加载慢,OK,我给大家一个网址,国内的,而且已经对API全部进行了翻译!
快顺手保存这个网址吧!那么我们是如何使用开发文档的呢?又是在哪里找到这些API呢?在首页中找到Develop->API Guides!这个是android开发的一些介绍,而Reference,全部都是相应的API文件!
控制组件简介
相信开发android的朋友都有这样的感受,就是我们用XML来定制界面,用java来实现功能。但安卓总是给程序员们开发相应的空间,让程序员们也可以通过代码来控制组件!在这里,我就不一一列举View类下的UI组件,但一定要知道这个既然有XML属性,那么一般会有java的相应方法!在这里我也不举例来使用java代码来设定相应的界面了,一般情况下,我们绝对不是使用这样的模式来写自己的应用的,如果您非要这要做的话,疯狂的android讲义上有大量这样的例子~~~至于如何使用构造器来重新绘制View,我觉得实在有必要再写一篇文章来论一论了!(呵呵,我又有新的文章可写了!)
布局管理
我记得最清楚的是:当时新建一个安卓的helloworld Project时,我的布局模式就是相对布局,那么了解布局的模式是必不可少的啦!
对了,对于新手的你,知道布局文件在什么地方吗?不错,就在新建项目时产生activity_main.xml的地方,即res文件下的layout文件!
那么我在这里就不介绍我们最常用的线性布局LinearLayout(相信每个入门的人都会直接使用线性布局来写demo),主要来介绍我们常用到的相对布局。
帧布局FrameLayout
帧布局是一帧布局的,是可以覆盖的一个布局,那么我们在使用TabHost组件的时候必然会用到帧布局的!那么在这里我就不详细说明它的用法!大家可以参考别人的博客!
谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout
题外话:当你用线性布局做好了demo,请多写写相对布局的文件,因为我感觉我在开发中最常用到的永远是相对布局!
相对布局RelativeLayout
相对布局是在开发过程中最常用到的开发模式了!下面是对相对布局的是xml的属性!
LayoutParams里的属性,只能赋予true或者flase
- android:layout_centerHorizontal 控制子控件是否在容器中水平居中
- android:layout_centerInParent 控制子控件是否在容器中居中
- android:layout_centerVerical 控制子控件是否在容器中垂直居中
属性赋值为ID的
- android:layout_toRightOf 控制子控件位于ID控件的右边
- android:layout_toLeftOf 控制子控件位于ID控件的左边
- android:layout_above 控制子控件位于ID控件的上方
- android:layout_below 控制子控件位于ID控件的下方
- android:layout_alignTop 控制子控件位于ID控件自身的上边界对齐
- android:layout_alignBottom 控制子控件位于ID控件自身的下边界对齐
- android:layout_alignLeft 控制子控件位于ID控件自身的左边界对齐
- android:layout_alignRight 控制子控件位于ID控件自身的右边界对齐
属性为px
- android:layout_marginLeft 控制子控件与容器左边的距离
- android:layout_paddingLeft 控制子控件与自身左边的距离
仅举出2例子,其他也是和上面的一样变化为Right、Top
组件
在组件中,经常会用到菜单栏,那么今天我们就介绍使用TabHost这个控件,其他的,比如TextView,Button等最常用的组件我就不介绍了,至于后面几个控件,在后期的博客中会一一介绍出来的!
TabHost组件
盛放Tab的容器就是TabHost。TabHost的实现有两种方式:
- 第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。
- 第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。
继承TabActivity
先来看一下布局文件,
<?xml version="1.0" encoding="utf-8"?>
<!-- 定义TabHost组件 -->
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- 定义第一个标签页的内容 -->
<LinearLayout android:id="@+id/tab01" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- 定义两个TextView用于显示标签页中的内容 -->
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="你好"/>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="我好"/>
</LinearLayout>
<!-- 定义第二个标签页的内容 -->
<LinearLayout android:id="@+id/tab02" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="大家好"/>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="你没救了"/>
</LinearLayout>
<!-- 定义第三个标签页的内容 -->
<LinearLayout android:id="@+id/tab03" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="真的吗"/>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="呵呵"/>
</LinearLayout>
</TabHost>
java文件
public class HelloTabHost extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//调用TabActivity的getTabHost()方法获取TabHost对象
TabHost tabHost = getTabHost();
//设置使用TabHost布局
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(),true);
//添加第一个标签页
tabHost.addTab(tabHost.newTabSpec("tab01").setIndicator("题外话").setContent(R.id.tab01));
//添加第二个标签页,并在其标签上添加一个图片
tabHost.addTab(tabHost.newTabSpec("tab02").setIndicator("天涯",getResources().getDrawable(R.drawable.icon)).setContent(R.id.tab02));
//添加第三个标签页
tabHost.addTab(tabHost.newTabSpec("tab03").setIndicator("无芳草").setContent(R.id.tab03));
}
}
直接找TabHost的ID实现
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<!-- TabHost必须包含一个 TabWidget和一个FrameLayout-->
<TabHost android:id="@+id/tabhost" android:layout_width="fill_parent" android:layout_height="wrap_content">
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- TabWidget的id属性必须为 @android:id/tabs-->
<TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<!-- FrameLayout的id属性必须为 @android:id/tabcontent-->
<FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:id="@+id/view1" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
<TextView android:id="@+id/view2" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
<TextView android:id="@+id/view3" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</FrameLayout>
</LinearLayout>
</TabHost>
java代码:
public class TabHostTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取TabHost对象
TabHost tabHost = (TabHost) findViewById(R.id.tabhost);
// 如果没有继承TabActivity时,通过该种方法加载启动tabHost
tabHost.setup();
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一个标签",
getResources().getDrawable(R.drawable.icon)).setContent(
R.id.view1));
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三个标签")
.setContent(R.id.view3));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二个标签")
.setContent(R.id.view2));
}
}
感谢本文所参考的博文,如果大家对tabhost还有什么不太明白的话,可以参考本文!
补充
针对于上面的代码,大家可能看到是标签一直在菜单的上方,那么想要让标签在下方的话,直接将TabWidget放在FrameLayout的下方即可!
例如一下代码!
</FrameLayout>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="98px" >
</TabWidget>
如果您对于我的博客喜欢的花,欢迎你来关注我哦!
android开发学习笔记系列(2)-android应用界面编程的更多相关文章
- android开发学习笔记系列(1)-android起航
前言 在学习安卓的过程中,我觉得非常有必要将自己所学的东西进行整理,因为每每当我知道我应该是如何去实现功能的时候,有许多细节问题我总是会遗漏,因此我也萌生了写一系列博客来描述自己学习的路线,让我的an ...
- android开发学习笔记系列(5)--fragment与viewpage
前言 在前面的博客写到我针对一个项目完成了动态布局的效果,顿时感觉很爽,那么下面我针对我在前文中所讲的tabhost的实现做出一个新的方法,tabhost基本已经被启用,现在基本使用Fragment与 ...
- android开发学习笔记系列(4)--android动态布局
前言 在做一个有关苏果APP的项目中,但是fuck的是,我完全使用相对布局之后及线性布局之后发现坑爹的事情了,屏幕不能适配,这是多大的痛,意味着,必须使用相应的代码实现动态布局!呵呵,不做项目不知道, ...
- android开发学习笔记系列(6)--代码规范
在开发android的时候,我对自己写的代码很是不满,原因在于自己看到别人的代码,很是头痛,原因很简单,别人写的代码,我就要去猜他的意思,极其烦恼,嗯,就是他没有遵循代码规范,因此我在博客园上寻找一篇 ...
- android开发学习笔记系列(3)--ScrollView与HorizontalScrollView
ScrollView与HorizontalScrollView 这是一个滚动视图,就是说如果你在你的UI中容不下那么多的内容,且你对自己的UI都已经设置好了px,OK,那么在适应屏幕过程中,我们并不希 ...
- android开发学习笔记000
使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
- 步步为营 SharePoint 开发学习笔记系列总结
转:http://www.cnblogs.com/springyangwc/archive/2011/08/03/2126763.html 概要 为时20多天的sharepoint开发学习笔记系列终于 ...
- 【转】Android开发学习笔记(一)——初识Android
对于一名程序员来说,“自顶向下”虽然是一种最普通不过的分析问题和解决问题的方式,但其却是简单且较为有效的一种.所以,将其应用到Android的学习中来,不至于将自己的冲动演变为一种盲目和不知所措. 根 ...
- Android开发学习笔记DDMS的使用
打开DDMS DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务. DDMS里面包含了:Device(设备) F ...
随机推荐
- matlab 生成mat文件
生成MAT文件 假如你的矩阵A.B都已赋值,现在需要将A,B矩阵保存成mat格式文件,执行如下命令:save mydata A B 就会把A B矩阵数据保存在yourdata.dat文件中了 保存指定 ...
- Configure Pi as simulation hardware for Simulink
1. Only version not older than R2013 supports Raspberry Pi. First, download support package in Matla ...
- 一个初学者的指南,使用D3做数据绑定
一个初学者的指南,使用D3做数据绑定 D3.js 是个强大的数据可视化库,可以做出惊艳的图表.比如:气泡图,线图和条形图--只需要很少行的代码 随着初学者对JavaScript的理解,可以将数组或者对 ...
- Visual Studio模板
转载自MSDN,此文仅作参考. http://msdn.microsoft.com/zh-cn/library/6db0hwky(VS.80).aspx 1. 如何导入“项目模板(Project Te ...
- Transaction And Lock--唯一索引下INSERT导致的死锁
背景: 曾经的一位同事问我:"数据库只有并发INSERT 操作,会造成死锁么?",我没有太多思考地回答"不会",但真的不会吗? 测试: --========== ...
- ASP.NET Core 2 学习笔记(二)生命周期
要了解程序的运行原理,就要先知道程序的进入点及生命周期.以往ASP.NET MVC的启动方式,是继承 HttpApplication 作为网站开始的进入点,而ASP.NET Core 改变了网站的启动 ...
- 如何: 在 VS中的设计时刻主从表绑定控件到数据库
这个示例展示了如何在 Visual Studio 2005 的设计时刻,把一个 data-aware 控件 (XtraGrid.XtraPivotGrid.XtraVerticalGrid 等) 绑定 ...
- 基于duilib的虚拟列表实现
本文由作者邹启文授权网易云社区发布. 在邮箱大师选择duilib作为UI开发库后,我们面临这样一个问题.随着时间的积累,用户数据会越来越多,如何保证我们的软件在展示这些数据时依然保持非常好的体验? 原 ...
- Servlet实现session读写
前言 一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些面包,如果有鸡蛋的话,买6个回来,这个丈夫买了6个面包回来,他的妻子大吃一惊:你为什么买了6个面包?! 程序员丈夫回答:因为他们有 ...
- string的相关问题
http://blog.csdn.net/seu_calvin/article/details/51404589 http://rednaxelafx.iteye.com/blog/774673 ht ...