【转】Android中 layoyt.xml转view对象

一、说明

添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写

二、前言说明

1.构造xml文件

2.LayoutInflater

提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutInflater找res/layout/下的xml布局文件来实例化的。

(1)创建

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或

LayoutInflater inflater = LayoutInflater.from(Activity.this);或

LayoutInflater inflater = getLayoutInflater();

这三种方法本质是相同的。

(2)inflate()

用LayoutInflater.inflate() 将LayOut文件转化成VIew。

View view = inflater.inflate(R.layout.block_gym_album_list_item, null);

3.添加视图文件

三、步骤
1、通过在xml文件定义layout(block_gym_album_list_item.xml)

1 <!--?xml version="1.0" encoding="utf-8"?-->
2 <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:core="http://schemas.android.com/apk/res/com.gxtag.gym" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="5dp">
3
4     <imageview android:id="@+id/iv_head_album" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/defaulthead">
5
6 </imageview></linearlayout>

block_gym_album_list_item.xml

2、main.xml

1 <!--?xml version="1.0" encoding="utf-8"?-->
2 <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_parent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
3
4     <include android:layout_width="fill_parent" android:layout_height="wrap_content" layout="@layout/block_head_back">
5
6 </include></linearlayout>

main.xml

3、

  1 package com.gxtag.gym.ui;
  2
  3 import android.app.Activity;
  4 import android.content.Context;
  5 import android.os.Bundle;
  6 import android.view.LayoutInflater;
  7 import android.view.View;
  8 import android.view.View.OnClickListener;
  9 import android.view.ViewGroup;
 10 import android.widget.LinearLayout;
 11 import android.widget.LinearLayout.LayoutParams;
 12 import android.widget.TextView;
 13
 14 import com.gxtag.gym.R;
 15 import com.icq.app.widget.StatedButton;
 16
 17 public class DynamicViewActivity extends Activity implements OnClickListener{
 18
 19     private Context mContext;
 20     private TextView mTv_title;
 21     private String title = "动态添加布局";
 22     private StatedButton mSbtn_back;
 23     private LinearLayout mLl_parent;
 24
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27         super.onCreate(savedInstanceState);
 28         setContentView(R.layout.activity_dynamic);
 29         mContext=this;
 30         initView();
 31         mLl_parent.addView(addView1());
 32         mLl_parent.addView(addView2());
 33
 34     }
 35
 36     private void initView() {
 37         // TODO 初始化视图
 38         mLl_parent=(LinearLayout) findViewById(R.id.ll_parent);
 39         mTv_title = (TextView) findViewById(R.id.tv_title);
 40         mTv_title.setText(String.format(String.format(
 41                 getResources().getString(R.string.title), title)));
 42         mSbtn_back = (StatedButton) findViewById(R.id.sbtn_navback);
 43         mSbtn_back.setOnClickListener(this);
 44
 45
 46     }
 47
 48     private View addView1() {
 49         // TODO 动态添加布局(xml方式)
 50         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
 51                     LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
 52 //      LayoutInflater inflater1=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 53 //      LayoutInflater inflater2 = getLayoutInflater();
 54         LayoutInflater inflater3 = LayoutInflater.from(mContext);
 55         View view = inflater3.inflate(R.layout.block_gym_album_list_item, null);
 56         view.setLayoutParams(lp);
 57         return view;
 58
 59     }
 60
 61     private View addView2() {
 62         // TODO 动态添加布局(java方式)
 63         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
 64                     LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
 65         LinearLayout view = new LinearLayout(this);
 66         view.setLayoutParams(lp);//设置布局参数
 67         view.setOrientation(LinearLayout.HORIZONTAL);// 设置子View的Linearlayout// 为垂直方向布局
 68         //定义子View中两个元素的布局
 69         ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams(
 70                 ViewGroup.LayoutParams.WRAP_CONTENT,
 71                 ViewGroup.LayoutParams.WRAP_CONTENT);
 72         ViewGroup.LayoutParams vlp2 = new ViewGroup.LayoutParams(
 73                 ViewGroup.LayoutParams.WRAP_CONTENT,
 74                 ViewGroup.LayoutParams.WRAP_CONTENT);
 75
 76         TextView tv1 = new TextView(this);
 77         TextView tv2 = new TextView(this);
 78         tv1.setLayoutParams(vlp);//设置TextView的布局
 79         tv2.setLayoutParams(vlp2);
 80         tv1.setText("姓名:");
 81         tv2.setText("李四");
 82         tv2.setPadding(calculateDpToPx(50), 0, 0, 0);//设置边距
 83         view.addView(tv1);//将TextView 添加到子View 中
 84         view.addView(tv2);//将TextView 添加到子View 中
 85         return view;
 86     }
 87
 88     private int calculateDpToPx(int padding_in_dp){
 89         final float scale = getResources().getDisplayMetrics().density;
 90         return  (int) (padding_in_dp * scale + 0.5f);
 91     }
 92
 93
 94     @Override
 95     public void onClick(View v) {
 96         // TODO 控件单击事件
 97         switch (v.getId()) {
 98         case R.id.sbtn_navback:
 99             this.finish();
100             break;
101         default:
102             break;
103         }
104     }
105
106 }

Java

时间: 2024-10-25 13:01:08

【转】Android中 layoyt.xml转view对象的相关文章

Android中layout.xml文件中加载自定义的View类

<com.bn.summer.GGView3 android:layout_width="100dip" android:layout_height="114dip" android:layout_marginLeft="11dip" /> View类的实现: package com.bn.summer; import android.content.Context; import android.content.res.Resour

解决Android中fragment_main.xml文件中的组件获取的问题

package com.dhy.phonedial; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.Me

android 中theme.xml与style.xml的区别

from://http://liangoogle.iteye.com/blog/1848448 android 中theme.xml与style.xml的区别: 相同点: 两者的定义相同. <resources> <stylename="theme"parent="android:Theme.Black"> <itemname="android:windowNoTitle">true< /item>

[转]Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

转自:http://www.cnblogs.com/angeldevil/p/3479431.html Android中自定义样式与View的构造函数中的第三个参数defStyle的意义 零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第三个参数defStyle 2. obtailStyledAttributes 3. Example 四.结论与代

Android中如何将子View的坐标转换为父View的坐标

最近打算照着Android的Launcher2源码写一个精简的带有拖动功能的Launcher.在分析DragLayer类的时候发现了一个有趣方法——getDescendantCoordRelativeToSelf.通过一下两篇文章的介绍和自己的实验,总算是弄清楚了该方法的原理. http://blog.csdn.net/hahajluzxb/article/details/8165258 http://www.cnblogs.com/platte/p/3534279.html 下面主要分析一下代

Android中使用SoftReference缓存图片对象

Java中的SoftReference即对象的软引用.如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它:如果内存空间不足了, 就会回收这些对象的内存.只要垃圾回收器没有回收它,该对象就可以被程序使用.软引用可用来实现内存敏感的高速缓存.使用软引用能防止内存泄露,增强程序的健壮性.   SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该 Java对象的回收.也就是说,一旦SoftReference保存了对一个Java对象的

android 中生成xml文件

在Android中生成xml文件真的很简单,下面提供2中方法,一种是通过String写入到文件,另外一种是通过XML 的 XmlSerializer. 以后遇到Android写xml内容就不会困惑了 1.通过string写入文件 String name=mEtName.getText().toString(); String age=mEtAge.getText().toString(); String Id=mEtID.getText().toString(); File file=new F

android中处理XML的方式

http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html 放在assets目录 http://www.cnblogs.com/luxiaofeng54/archive/2011/03/15/1984617.html assets及res目录 http://blog.csdn.net/hanjingjingpan/article/details/8812770 res下的xml目录 http://www.cnblogs.c

修改Android中strings.xml文件, 动态改变数据

有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name="data">整数型:%1$d,浮点型:%2$.2f,字符串:%3$s</string> 其中%后面是占位符的位置,从1开始, $ 后面是填充数据的类型         %d:表示整数型:         %f :表示浮点型,其中f前面的.2 表示小数的位数         %