Android中的Linerlayout布局和RelativeLayout布局,ListView组件

前一段时间系统的学习了安卓中的四大布局,RelativityLayout,LinerLayout,AbsoluteLayout,Framelayout,我常用的是LinerLayout和RelativityLayout,所以我就先简答说说这两个布局。


布局

1. LinerLayout:线性布局:LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,可以再一个线性布局里面加入相对布局。android:orientation:设置它内容的对其方向(横向/竖向),支持widget权重。

属性:

<span style="white-space:pre">	</span>  android:layout_width="fill_parent"
   <span style="white-space:pre">	</span>  android:layout_height="fill_parent"
  <span style="white-space:pre">	</span>  android:orientation="horizontal"
  <span style="white-space:pre">	</span>  android:padding="10dip"
          android:id="@+id/ll_item"

 

2.RelativityLayout(相对布局):可以设置组件和组件的相对关系,通过layout_XX方法实现。                                                                                                          

RelativeLayout用到的一些重要的属性:


第一类:属性值为true或false
android:layout_centerHrizontal                                       水平居中
android:layout_centerVertical                                         垂直居中
android:layout_centerInparent                                       相对于父元素完全居中
android:layout_alignParentBottom                   贴紧父元素的下边缘
android:layout_alignParentLeft                      贴紧父元素的左边缘
android:layout_alignParentRight                     贴紧父元素的右边缘
android:layout_alignParentTop                      贴紧父元素的上边缘
android:layout_alignWithParentIfMissing              如果对应的兄弟元素找不到的话就以父元素做参照物

第二类:属性值必须为id的引用名“@id/id-name”
android:layout_below                        在某元素的下方
android:layout_above                        在某元素的的上方
android:layout_toLeftOf                     在某元素的左边
android:layout_toRightOf                    在某元素的右边

android:layout_alignTop                     本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft                     本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom                本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight                   本元素的右边缘和某元素的的右边缘对齐

第三类:属性值为具体的像素值,如30dip,40px
android:layout_marginBottom             离某元素底边缘的距离
android:layout_marginLeft                  离某元素左边缘的距离
android:layout_marginRight                离某元素右边缘的距离
android:layout_marginTop                  离某元素上边缘的距离



ListView:最初的印象是使用它就可以不用在一组textView上包上ScrollView了,实现滑动展示数据。

使用方法,先findViewByid()获得这个listbiew--> lv;然后调用 lv.setAdapter(Adapter)设置适配器,这样,这个listview中展时,会调用这个适配器的方法,实现数据展示,关于适配器,晚上回来继续写,先睡会去上课。。

-----

继续分析listview,昨天说要set一个适配器,充当视图和数据之间的桥梁作用,mvc中的v和c,这个适配器要继承一个BaseAdapter,里面有四个方法,暂时用到的只有两个,getCount(),getView(int position, View convertView, ViewGroup parent);position是要提取的对象id,根据getCount的总数和屏幕位置,会连续间断调用这个方法,从0--count-1;converView是已经缓存的不在屏幕上显示的对象。还有一个类方法,

flater = MainActivity.this.getLayoutInflater();
view = flater.inflate(R.layout.person_item,null);

获得一个布局填充器,然后把一个布局文件变成一个view,getView()方法返回的就是一个xml布局的view形式。


package com.test.database;

import java.util.List;

import com.test.database.R.id;
import com.test.database.dao.PersonDao;
import com.test.database.model.Person;

import android.support.v4.app.Fragment;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends Activity {
	List<Person> persons ;
	Person person1 ;
		
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
       
		
		ListView lv = (ListView)findViewById(R.id.lv);
		
		lv.setAdapter(new MyAdapter());
	
	}
	
	class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 1;
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			LayoutInflater flater = null;
			View view = null;
			
			
			if(convertView == null) {
				// 布局填充器对象, 用于把xml布局转换成view对象
				flater = MainActivity.this.getLayoutInflater();
				view = flater.inflate(R.layout.person_item,null);
			} else {
				view = convertView;
			}
			
					
			
			TextView tv_name = (TextView)view.findViewById(R.id.tv_name);
			TextView tv_age = (TextView)view.findViewById(R.id.tv_age);
			
			tv_name.setText("11z");
			tv_age.setText("22");
			
			return view;				
		}
	}
}

这是自己写适配器的例子,还可以用比较常用方便的android提供的适配器,


ArrayAdapter(Context context,View view,String[] string)

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
         ArrayListDemo.this, android.R.layout.simple_list_item_1,
         adapterData);

这段代码是创建一个数组适配器的代码,里面有三个参数,第一个参数是上下文,就是当前的Activity, 第二个参数是android sdk中自己内置的一个布局,它里面只有一个TextView,这个参数是表明我们数组中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面;第三个参数就是我们要显示的数据。listView会根据这三个参数,遍历adapterData里面的每一条数据,读出一条,显示到第二个参数对应的布局中。


SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)


代码片段:

Map<String ,object> person = new HashMap<String, object>()

List<Map<String,object>> list = new ArrayList<Map<String,object>>

适配器的context就是上下文,data就是这个map集合list,resource是XML布局文件的资源ID,from数组是Map对象的String项,就是名称,然后to是指这个布局文件中的每个组件的资源ID,这样这个适配器就会遍历每一个list中的对象,然后把所有的map按照名称把对应的value数值放到布局文件对应的组件中,进行显示。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值