Android学习系列(二)布局管理器之线性布局的3种实现方式
转载请注明出处: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种实现方式的更多相关文章
- 三十三、Java图形化界面设计——布局管理器之null布局(空布局)
摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...
- Java 图形编程 二:布局管理器之顺序布局
package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...
- 转:三十三、Java图形化界面设计——布局管理器之null布局(空布局)——即SWT中的绝对布局
http://blog.csdn.net/liujun13579/article/details/7774267 一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到 ...
- Java图形化界面设计——布局管理器之null布局(空布局)
一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局. 操作方法: 1) 首先利用setLayout(null)语句将容器的布局设置为null布局(空布局 ...
- Android课程---布局管理器之相对布局(二)
这次示例代码是相对布局中兄弟组件之间,设置按钮的位置,难度:*****,一定要注意有同方向和反方向之分: 1.同方向 1)layout_alignLeft 同方向左对齐 2)layout_alignR ...
- Android课程---布局管理器之相对布局(一)
下面示例的是在父容器里如何设置按钮的位置,难度:***,重点是找到一个主按钮,设置它的id,然后根据它来设置其他按钮在父容器的位置. 代码示例: <?xml version="1.0& ...
- Java 图形编程 二:布局管理器之边界布局
package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...
- Android学习系列(23)--App主界面实现
在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...
随机推荐
- pat 1036
1036. 跟奥巴马一起编程(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 美国总统奥巴马不仅呼吁所有人 ...
- wpf Combobox模拟键盘按键
private void RadComboBox_PreviewKeyUp(object sender, KeyEventArgs e) { try { var obj = (RadComboBox) ...
- 九度oj 题目1391:顺时针打印矩阵
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2 ...
- 九度oj 1003
前几天开刷九度oj,准备把做的题都放上,先放1003 题目1003:A+B 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:16923 解决:7029 题目描述: 给 ...
- math & 三元一次方程组的解法
math & 三元一次方程组的解法 class 6 math 例题 问题: 1. 已经做好的与没有做好的比例是 5 比 7; 2 再做好51,完成总数的 70%; 3. 问,一共要做多少朵花? ...
- vue-cli3 vue.config.js配置
module.exports = { // 基本路径 baseUrl: '', // 输出文件目录 outputDir: 'dist', // eslint-loader 是否在保存的时候检查 lin ...
- 关于oracle 11g导出的dmp文件无法导入10g的问题
今天遇到一个问题,由于无法远程11g是数据库服务器,只能用exp命令导出了一张表的dmp文件:在本地导入时遇到如下错误: IMP-00010: 不是有效的导出文件, 头部验证失败IMP-00000: ...
- 卡牌游戏(bzoj 3191)
Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字 ...
- touch上滑加载
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery 同源跨域请求整理
//同源ajax请求数据 function getData(url,paramjson,fn) { $.ajax({ type : "POST", //提交方式 url : url ...