转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39643669



LinearLayout是Android控件中的线性布局控件,它包括的子控件将以横向(HORIZONTAL)或竖向(VERTICAL)的方式排列,依照相对位置来排列全部的子控件及引用的布局容器。

超过边界时,某些控件将缺失或消失。

因此一个垂直列表的每一行仅仅会有一个控件或者是引用的布局容器。

一、LinearLayout线性布局的相关属性说明:

android:orientation                       布局方向:"vertical"垂直线性布局,"horizontal"水平线性布局

android:id                                     为控件指定对应的ID

android:text                                  指定控件其中显示的文字。须要注意的是,这里尽量使用strings.xml文件其中的字符

android:grivity                               指定控件的基本位置。比方说居中,居右等位置

android:textSize                            指定控件其中字体的大小

android:background                     指定该控件所使用的背景色,RGB命名法

android:width                                指定控件的宽度

android:height                              指定控件的高度

android:padding                           指定控件的内边距,也就是说控件其中的内容

android:singleLine                          假设设置为真的话,则将控件的内容在同一行其中进行显示   

android:layout_weight                  默认值为0,layout_weight属性能够控制各个控件在布局中的相对大小,线性布局会依据该控件layout_weight值与其·    所处布局中全部控件layout_weight值之和的比值为该控件分配占用的区域。

二、LinearLayout项目演示3种实现方式演示样例

2.1 第一种实现方式:xml配置实现LinearLayout

<activity_main.xml>

<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" > <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello!"
android:textSize="20sp" /> </LinearLayout>



2.2 另外一种实现方式:代码实现LinearLayout

<MainActivity.java>

</pre><pre name="code" class="java">/**
* @author liu
* @description 代码动态创建线性布局管理器
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
LinearLayout layout = new LinearLayout(this);// 创建现行布局管理器
LinearLayout.LayoutParams params = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);// 设置线性布局參数
layout.setOrientation(LinearLayout.VERTICAL);
TextView txt = new TextView(this);
LinearLayout.LayoutParams txtParams = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);// 设置组件參数
txt.setLayoutParams(txtParams);
txt.setText("Hello!");
txt.setTextSize(20);
layout.addView(txt, txtParams);
addContentView(layout, params); }
}

2.3 第三种实现方式:自己定义实现LinearLayout(继承LinearLayout)

2.3.1、实现效果图(图片旋转)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGh5X3ljdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

2.3.2、项目结构图

2.3.3、具体的编码实现

1)继承LinearLayout的子类文件MyLinearLayout.java:

public class MyLinearLayout extends LinearLayout {
/**
* 在xml布局文件里声名的view,创建时由系统自己主动调用。
*/
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
} /**
* 初始化LinearLayout视图
*/
private void initView() {
// 设置LinearLayout的布局方向
setOrientation(LinearLayout.VERTICAL);
// 设置布局參数
LinearLayout.LayoutParams params = new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
TextView tv = new TextView(getContext());
tv.setText(R.string.hello_world);
// 在MyLinearLayout里面加入TextView
addView(tv, params);
for (int i = 0; i < 10; i++) {
ImageView iv = new ImageView(getContext());
iv.setImageResource(R.drawable.ic_launcher);
Animation animation1 = AnimationUtils.loadAnimation(getContext(),
R.anim.rotate);
iv.setAnimation(animation1);
// 在MyLinearLayout里面加入10个带动画的ImageView
addView(iv, params);
}
} /**
* 对子view进行布局,确定子view的位置
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
} /**
* 測量尺寸时的回调方法
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} }

2)主布局资源文件,activity_main.xml:

<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" > <com.liu.mylinearlayout01.MyLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent" /> </LinearLayout>

3)动画文件rotate.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:fillBefore="false" > <!--
旋转效果,pivotX,pivotY指旋转坐标;
fillAfter="true" fillBefore="false" 表示动画停止在最后的位置;
fromDegrees toDegrees从0°到350°
startOffset:延时1s运行
duration:动画运行时间3s
repeatCount: 反复次数3+1
-->
<rotate
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%p"
android:pivotY="20%p"
android:repeatCount="3"
android:startOffset="1000"
android:toDegrees="350" /> </set>

4)、主Activity程序入口类,MainActivity.java:无需改动(按Eclipse自己主动生成的代码就可以)

以上就是笔者知道的LinearLayout的三种实现基本方式。

源代码下载地址



Android学习系列(二)布局管理器之线性布局的3种实现方式的更多相关文章

  1. 三十三、Java图形化界面设计——布局管理器之null布局(空布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...

  2. Java 图形编程 二:布局管理器之顺序布局

    package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...

  3. 转:三十三、Java图形化界面设计——布局管理器之null布局(空布局)——即SWT中的绝对布局

    http://blog.csdn.net/liujun13579/article/details/7774267    一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到 ...

  4. Java图形化界面设计——布局管理器之null布局(空布局)

    一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局. 操作方法: 1)       首先利用setLayout(null)语句将容器的布局设置为null布局(空布局 ...

  5. Android课程---布局管理器之相对布局(二)

    这次示例代码是相对布局中兄弟组件之间,设置按钮的位置,难度:*****,一定要注意有同方向和反方向之分: 1.同方向 1)layout_alignLeft 同方向左对齐 2)layout_alignR ...

  6. Android课程---布局管理器之相对布局(一)

    下面示例的是在父容器里如何设置按钮的位置,难度:***,重点是找到一个主按钮,设置它的id,然后根据它来设置其他按钮在父容器的位置. 代码示例: <?xml version="1.0& ...

  7. Java 图形编程 二:布局管理器之边界布局

    package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...

  8. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  9. Android学习系列(23)--App主界面实现

    在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...

随机推荐

  1. 【Luogu】P2602数字计数(数位DP)

    题目链接 数位DP好喵啊.自己yy两个小时的dfs:题解40行代码=10WA:10A. md而且还不是完全理解题解是什么意思. 所以放题解链接. #include<cstdio> #inc ...

  2. [BZOJ4318] WJMZBMR打osu! / Easy (期望DP)

    题目链接 Solution Wa,我是真的被期望折服了,感觉这道题拿来练手正好. DP的难度可做又巧妙... 我们定义: \(f[i]\) 代表到第 \(i\) 次点击的时候的最大答案. \(g[i] ...

  3. CF911F Tree Destruction (树的直径,贪心)

    题目链接 Solution 1.先找出树的直径. 2.遍历直径沿途的每一个节点以及它的子树. 3.然后对于每个非直径节点直接统计答案,令直径的两个端点为 \(x_1,x_2\) . \[Ans=\su ...

  4. no main manifest attribute, in demo-1.0.jar

    今天想打包一个jar到Linux上运行,发现使用java -jar demo-1.0.jar 运行报错: no main manifest attribute, in demo-1.0.jar 解决方 ...

  5. Python基础教程总结(一)

    引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...

  6. Idea连接服务器docker并部署代码到docker实现一键启动

    好记性不如烂笔头,写笔记是为了回头看的. 谁要是不小心搜了看了,如有不足之处敬请谅解. 一.准备工作 虚拟机centos7.X,docker1.3.X,Win10 Idea2018.1 默认Idea已 ...

  7. 【Vijos1534】高性能计算机(DP)

    题意:有NA个A与NB个B两种任务需要完成,完成一段长度为X的A任务需要时间ta+ka*x*x,B任务类似,连续的同一种任务不能分成两段运行 有P台可以并行运算的计算机,求最快完成所有任务的时间 1≤ ...

  8. 从反汇编看待C++ new

    首先来看最简单的new操作 int main() { int *temp = new int; delete temp; } 反汇编结果:调用了operator new 00311C9E push 4 ...

  9. 搭建vue-cli时候报错处理

    最近在使用vue-cli搭建目录时出现 “webpack-dev-server不是内部或外部命令,也不是可运行的程序 或批处理文件”情况 在网上查了不少资料和解决方法后,结合自己的情况应该是环境变量的 ...

  10. Codeforces 333E Summer Earnings(bitset)

    题目链接 Summer Earnings 类似MST_Kruskal的做法,连边后sort. 然后对于每条边,依次处理下来,当发现存在三角形时即停止.(具体细节见代码) 答案即为发现三角形时当前所在边 ...