android中的代码布局


前言:
习惯了用xml来写布局的,再用代码来写布局,恐怕会很类。但毕竟有时候,我们还是需要用到代码来写布局。
代码布局与xml布局有很多相似点,在大多数方法上都可以直接用,只有个别方法的写法不太一样,接下来,我将分几篇来介绍常用的几种控件。

以Android工程自带的main.xml为例,看看代码是如何实现的

一、设置当前布局
关于这个问题只针对初级水平的人员,其他人可略过。
我们知道,在初建一个activity的时候,程序会帮我们建好:

[java]  view plain  copy
  1. protected void onCreate(Bundle savedInstanceState) {  
  2.     super.onCreate(savedInstanceState);  
  3.     setContentView(R.layout.main);  
  4. }  

setContentView(R.layout.main);就是设置当前布局的样式。
我们用代码写布局的话,这里就要传入一个View对象。实际上它就是线性布局,相对布局,文本框等的对象。比如我们创建了一个线性布局,那么我们这里就将它的传进去,例如:

[java]  view plain  copy
  1. LinearLayout mLinearLayout = new LinearLayout(this);  
  2. setContentView(mLinearLayout);  
二、线性布局

线性布局是我们经常使用的,我们先从它入手来熟悉代码布局。
[java]  view plain  copy
  1. // 创建LinearLayout对象  
  2. LinearLayout mLinearLayout = new LinearLayout(this);  
  3.   
  4. // 建立布局样式宽和高,对应xml布局中:  
  5. // android:layout_width="fill_parent"  
  6. // android:layout_height="fill_parent"  
  7. mLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(  
  8.         LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  9.   
  10. // 设置方向,对应xml布局中:  
  11. // android:orientation="vertical"  
  12. mLinearLayout.setOrientation(LinearLayout.VERTICAL);  
LayoutParams是有很多种的,如果你不熟悉的话,最好在前面加上LinearLayout,以便于你识别。
这样,我们就最简单的建立一个外层布局,接下来,我们将实现TextView。

三、TextView
[java]  view plain  copy
  1. // 创建TextView对象  
  2. TextView mTextView = new TextView(this);  
  3. // 设置文字  
  4. mTextView.setText("hello world");  
  5.   
  6. // 为其建立布局样式,对应xml布局中:  
  7. // android:layout_width="fill_parent"  
  8. // android:layout_height="wrap_content"  
  9. LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(  
  10.         LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
  11.   
  12. // 在父类布局中添加它,及布局样式  
  13. mLinearLayout.addView(mTextView, mLayoutParams);  

这里为其设置的布局样式与父类不同,你可以理解为,它设置的布局样式并不是为自己设置的,而是要告诉父类,我要摆放在什么位置上。理解这一点很关键,因为它是设置组件位置的关键!

它还有很多其他的参数设置:
mTextView.setTextColor(-1);//字体颜色
mTextView.setTextSize(16);//字体大小

最后:如果代码没有错误的话,运行起来和运行xml是一样的。
下面是完整版代码:

[java]  view plain  copy
  1. public class TestLayout extends BaseActivity {  
  2.   
  3.     @Override  
  4.     protected void initRecourse() {  
  5.         // TODO Auto-generated method stub  
  6.   
  7.     }  
  8.   
  9.     @Override  
  10.     protected void initData() {  
  11.         // TODO Auto-generated method stub  
  12.   
  13.     }  
  14.   
  15.     @Override  
  16.     protected ViewGroup initView() {  
  17.         // 创建LinearLayout对象  
  18.         LinearLayout mLinearLayout = new LinearLayout(this);  
  19.   
  20.         // 建立布局样式宽和高,对应xml布局中:  
  21.         // android:layout_width="fill_parent"  
  22.         // android:layout_height="fill_parent"  
  23.         mLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(  
  24.                 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  25.   
  26.         // 设置方向,对应xml布局中:  
  27.         // android:orientation="vertical"  
  28.         mLinearLayout.setOrientation(LinearLayout.VERTICAL);  
  29.   
  30.         // 创建TextView对象  
  31.         TextView mTextView = new TextView(this);  
  32.         // 设置文字  
  33.         mTextView.setText("hello world");  
  34.   
  35.         // 为其建立布局样式,对应xml布局中:  
  36.         // android:layout_width="fill_parent"  
  37.         // android:layout_height="wrap_content"  
  38.         LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(  
  39.                 LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
  40.   
  41.         // 在父类布局中添加它,及布局样式  
  42.         mLinearLayout.addView(mTextView, mLayoutParams);  
  43.   
  44.         return mLinearLayout;  
  45.     }  
  46. }  

附:重写的activity
这里的重写activity是为了更好为我们编写代码布局服务,在以后的代码范例中,都会采用下面继承该类方式。

[java]  view plain  copy
  1. public abstract class BaseActivity extends Activity {  
  2.   
  3.     public Handler handler;  
  4.   
  5.     /** 初始化数据 */  
  6.     protected abstract void initData();  
  7.   
  8.     /** 初始化资源 */  
  9.     protected abstract void initRecourse();  
  10.   
  11.     /** 初始化界面 */  
  12.     protected abstract View initView();  
  13.   
  14.     /** 处理handler回传的信息 */  
  15.     public void dispatchMessage(Message msg) {  
  16.     }  
  17.   
  18.     protected void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.   
  21.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  22.         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  23.   
  24.         initData();  
  25.   
  26.         initRecourse();  
  27.   
  28.         setContentView(initView());  
  29.   
  30.         handler = new Handler() {  
  31.             public void dispatchMessage(Message msg) {  
  32.                 BaseActivity.this.dispatchMessage(msg);  
  33.             }  
  34.         };  
  35.     }  
  36. }  

注意:这里的资源加载一般是从asset中加载进来的


上一篇,我们已经介绍了一点代码布局,接下来,我们接着介绍

一、常用组件设置
Button,ImageView等组件基本上和xml中所定义的基本一样,就不再详细介绍了。

给出一些常用的设置方式,供大家参考:
setVisibility(View.VISIBLE)  //是否可见
requestFocus()  //获得焦点
setGravity(Gravity.CENTER_VERTICAL)  //内部位置对齐方式
setPadding(10, 5, 5, 5);  //在内部距离各边距离
setId(1);  //设置ID标示

对于xml中,Android:layout_marginTop的设置,组件是没有这个设置方法的。其实从layout_marginTop字面意义也可以看出,它是针对父类布局设置位置的。
这里给出个关于设置layout_marginTop的例子:

[java]  view plain  copy
  1. mLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT,  
  2.         LayoutParams.WRAP_CONTENT);  
  3. mLayoutParams.addRule(RelativeLayout.RIGHT_OF, ID_IMAGE_HEAD);  
  4. mLayoutParams.topMargin = 5;  
  5. mLinearLayout.addView(mTextView, mLayoutParams);  
如果对于上一篇关于TextView组件位置的设置有印象的话,这里就不难理解了,它就是告诉父类对象,当前组件针对父类布局要放到什么位置。
关于EditText这个组件,如何设置最大输入字数,这里只给个例子:
[java]  view plain  copy
  1. mEditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(8) });  
我这里设置最多可输入的字数为8个。

二、相对布局
除了经常使用的线性布局外,还常会用到相对布局,尤其是它的相对位置设计非常适合机型适配要求。
在写相对布局的xml时候,我们几乎要位每个最近设置ID标示,好告诉其他组件相对位置关系。在代码布局中也同样如此,需要为它们独立设置ID标示,而且 不要重复 ,否则位置关系就会错误。
下面,我们给出一段例子,方便大家理解:
[java]  view plain  copy
  1. // 创建RelativeLayout对象  
  2. RelativeLayout mRelativeLayout = new RelativeLayout(this);  
  3. mRelativeLayout.setLayoutParams(new LinearLayout.LayoutParams(  
  4.         LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  5.   
  6. // TextView组件:白色30号字  
  7. TextView mTextView = new TextView(this);  
  8. mTextView.setTextSize(30);  
  9. mTextView.setTextColor(-1);  
  10. mTextView.setText("hello world");  
  11. // 为其设置唯一的id标示  
  12. mTextView.setId(1);  
  13.   
  14. // 为其设置位置关系  
  15. RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(  
  16.         LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  17. // 距离顶部20  
  18. mLayoutParams.topMargin = 20;  
  19. // 距离左边20  
  20. mLayoutParams.leftMargin = 20;  
  21. // 添加组件  
  22. mRelativeLayout.addView(mTextView, mLayoutParams);  
  23.   
  24. // TextView组件:红色20号字  
  25. mTextView = new TextView(this);  
  26. mTextView.setTextSize(20);  
  27. mTextView.setTextColor(0xffff0000);  
  28. mTextView.setText("hello world");  
  29. // 为其设置唯一的id标示  
  30. mTextView.setId(2);  
  31.   
  32. // 为其设置位置关系  
  33. mLayoutParams = new RelativeLayout.LayoutParams(  
  34.         LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  35. // 距离顶部20  
  36. mLayoutParams.topMargin = 20;  
  37. // 距离左边20  
  38. mLayoutParams.leftMargin = 20;  
  39. // 设置它在白色字的下面  
  40. mLayoutParams.addRule(RelativeLayout.BELOW, 1);  
  41. // 水平居中显示  
  42. mLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);  
  43.   
  44. // 添加组件  
  45. mRelativeLayout.addView(mTextView, mLayoutParams);  
效果图:



该文章转载自:http://blog.csdn.net/xyz_fly/article/details/7498205


更多相关文章

  1. 关于Android(安卓)7.0系统通知声音不能播放
  2. Android(安卓)6.0以上权限拒绝打开权限设置界面的解决方法
  3. android 初学之XML小技巧小结---自适应各种分辨率屏幕
  4. Android的ViewStub、include、merge使用与源码分析
  5. Android新手入门2016(4)--Android(安卓)SDK下载代理设置
  6. Android(安卓)Studio系列教程二--基本设置与运行
  7. Android(安卓)开发解决APP在18:9,18.5:9,19:9,19:10尺寸的手机上不
  8. Android(安卓)API Guides---Settings
  9. Android(安卓)过度渲染及优化方法--3D效果(JakeWharton大神的scal

随机推荐

  1. android 学习二 从HelloWorld说起
  2. android xml中应用占位符
  3. google map 的使用
  4. Android实现购物车加减器控件
  5. android native jni 代码
  6. Android 过度绘制优化
  7. Android M新特性Doze and App Standby模
  8. 59. Instant Run 笔记
  9. Android全屏显示(隐藏项目名和通知栏)
  10. android 拍照或从相册获取图片 返回 bitm