Android中添加布局和初始化布局总结

在android中布局很重要,下面总结下布局的三种形式

①.在Activity的onCreate()方法中进行添加比如: setContentView(R.layout.activity_main);或者

setContentView(this.getResources().getIdentifier("homeleftmenu_layout", "layout", this.getPackageName()) );

②此种情况多用在适配器中进行加载,如下:

一种方法是用View.inflate()方法;

代码说明:前提是自定义了一个参数: private Context context;

@override代码是自定义一个适配器CalendarAdapter extends BaseAdapter中的getView()方法中来添加一个自定义的布局

calendar_cell_layout.xml.

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder = null;
		if (convertView == null) { 

			convertView = View.inflate(context,R.layout.calendar_cell_layout,null);
			holder = new ViewHolder();
			holder.dayTextView = (TextView)convertView.findViewById(R.id.jkdayid);
			holder.dayNLTextView = (TextView)convertView.findViewById(R.id.jkday_nlid);
			holder.isdataImageView = (ImageView)convertView.findViewById(R.id.isdataid);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
	public class ViewHolder {
		public TextView dayTextView;
		public TextView dayNLTextView;
		public ImageView isdataImageView;
	}
另外一种形式如下:用LayoutInflater.from(Context).inflate()方法。
代码说明:是一个自定义的 class DeviceListAdapter extends BaseAdapter中的override的getView()方法。
<pre name="code" class="java">	@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			if (convertView == null) {
				convertView = LayoutInflater.from(MainActivity.this).inflate(
						R.layout.list_bluetooth_item, null);
				viewHolder = new ViewHolder();
				viewHolder.tv_devName = (TextView) convertView
						.findViewById(R.id.tv_blueth_name);
				viewHolder.tv_devAddress = (TextView) convertView
						.findViewById(R.id.tv_blueth_location);
				viewHolder.tv_devStatus=(TextView)convertView.findViewById(R.id.tv_blueth_status);
				convertView.setTag(viewHolder);
			} else {
				convertView.getTag();
			}
		}

	}

	class ViewHolder {
		TextView tv_devName, tv_devAddress,tv_devStatus;
	}

③写一个简单的方法来创建一个view对象:

private View initView() {
		// TODO Auto-generated method stub
		TextView textView = new TextView(this);
		textView.setText("title");
		textView.setTextSize(20);
		textView.setTextColor(Color.RED);
		textView.setGravity(Gravity.CENTER);

		LinearLayout ll = new LinearLayout(this);

		LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
				LayoutParams.MATCH_PARENT);
		ll.setBackgroundColor(Color.WHITE);

		ll.addView(textView, params);

		return ll;

	}

④这种方法也是在适配器中进行创建的,关键代码部分如下:

说明:自定义一个适配器继承BaseAdapter,其中的context是要使用这个适配器的一个Activity, scene_layers_item是布局文件的名称,其中的iten_tv ,和item_cb是id,list是 List<HashMap<String, Object>> .

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder;
		if(convertView == null)
		{
			holder = new ViewHolder();
			convertView = inflater.inflate(context.getResources().getIdentifier("scene_layers_item", "layout",context.getApplication().getPackageName()), null);
			holder.tv = (TextView)convertView.findViewById(context.getResources().getIdentifier("item_tv", "id",context.getApplication().getPackageName()));
			holder.cb= (CheckBox)convertView.findViewById(context.getResources().getIdentifier("item_cb", "id",context.getApplication().getPackageName()));
			holder.cb.setVisibility(View.VISIBLE);
			convertView.setTag(holder);
			
			
		}else
		{
			holder = (ViewHolder)convertView.getTag();
		}
		
		HashMap<String, Object> itemMap = list.get(position);
		if(itemMap != null)
		{
			String layname = (String)itemMap.get("nameshow");
			if(layname != null)
			{
				holder.tv.setText(layname);
			}
			holder.cb.setChecked((Boolean)itemMap.get("isshow"));
			
		}
	
		
		return convertView;
	}
	
	public class ViewHolder {
		public TextView tv = null;    
	    public CheckBox cb = null;
	}

⑤其实在对各种布局都熟悉的情况下,采用自定义布局,对android系统提供的view进行继承,重写其中的方法,达到想要的效果后,然后在需要的地方进行引用。

以上均来自个人总结,如有不妥当之处,还烦请各位编程爱好者批评指正,共同进步!!!



 
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android进行属性声明和初始化时可能会出现各种错误,常见的错误有以下几种情况: 1. 未找到属性或初始化错误:当在布局文件或代码声明属性时,如果拼写错误或者未声明该属性,会出现找不到属性的错误。解决方法是仔细检查拼写和声明,确保属性名正确。 2. 型不匹配错误:属性的型和对应的初始化值的型不匹配,会导致编译错误。例如,将字符串型赋值给整型属性,或将整型型赋值给布尔型属性。解决方法是确保属性和初始化值的型一致。 3. NullPointerException错误:当属性在使用之前没有被正确初始化时,会导致NullPointerException错误。解决方法是在声明属性时进行初始化,或在使用属性之前进行判空处理。 4. 跨线程访问属性错误:在Android,UI组件的属性必须在主线程访问和修改。如果在子线程对UI组件的属性进行操作,会导致运行时错误。解决方法是使用Handler、runOnUiThread()等方式在主线程进行UI更新操作。 5. R文件错误:在使用布局文件的属性时,如果引入R文件出现问题,可能会导致属性无法找到或初始化错误。解决方法是检查R文件是否正确生成,以及导入是否正确。 在Android开发,属性声明和初始化错误是常见的问题,需要仔细检查代码和布局文件,确保属性的正确声明和初始化,避免出现错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值