之前的项目在推进,遇到一个问题是这样的:利用popwindow制作的菜单,切换不同的界面,总共有10个菜单,几乎标题都是一样的,只不过标题不一样,现在遇到有一个界面要求中间的标题右侧要要加一个按钮,能够点击跳转到另外一个界面,要解决的问题是如何动态在标题右侧生成按钮,并适配各种型号手机:

      解决方案1:使用

<pre name="code" class="java">                RelativeLayout  <span style="font-family: Arial, Helvetica, sans-serif;">ll = (RelativeLayout) findViewById(R.id.main_toolbar);//要添加标题的布局,得到布局id之后,在进行按钮的添加</span>

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(62, 62);layoutParams.leftMargin=430;//设置里屏幕左侧的按钮距离,刚好在标题的右侧layoutParams.topMargin=10;//离上部的距离// 将挂单加号按钮 加入到LinearLayout 中,添加监听事件b1 = new Button(getBaseContext());b1.setMinHeight(32);b1.setMinWidth(32);b1.setBackgroundResource(R.drawable.add);b1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(getBaseContext(), "该功能后续添加,别心急",Toast.LENGTH_SHORT).show();}});

ll.addView(b1,layoutParams);


       这样的方案其实按钮里屏幕的间距是写死了的,在两个真机红米和htc测试是刚好在标题右侧,不过在华为的机子上就会显示不正常,显然这种固定距离的做法是不可取的。我试着找到标题的id,设置按钮刚好在标题的右侧一点点位置,尝试使用下列语句:

 

//定义一个RelativeLayout组件
         RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
         //与父组件顶部对齐
         lp1.addRule(RelativeLayout.ALIGN_WITH_PARENT_RIGHT);
         //横向居中,是
         lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, true);
         // btn1 位于父 View 的顶部,在父 View 中水平居中
         rl.addView(btn1, lp1 );

     上机测试了,根本没有用,新增的按钮老是在屏幕的最右侧,不知道其他人有没有好的办法可以交流。


      解决方案2: 直接在界面上xml文件就写上按钮的控件,然后在代码中动态隐藏和显示,这样的做法是不用担心手机的适配问题,方案如下:

       在界面上很简单,通过相对布局,先确定好位置:

<Button
            android:id="@+id/addorder"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_centerVertical="true"
            android:layout_marginRight="90dp"
            android:layout_toLeftOf="@+id/menu_person"
            android:background="@drawable/add" />



   在代码层面也很简单,使用如下代码对按钮显示和隐藏进行控制:

private void initaddmenu(){
		
		ll = (RelativeLayout) findViewById(R.id.main_toolbar);
        <span style="font-size:24px;color:#cc0000;">b1.setVisibility(View.VISIBLE);//使按钮可见</span>
		b1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Toast.makeText(getBaseContext(), "该功能后续添加,别心急",
						Toast.LENGTH_SHORT).show();
			}
		});
	}
	
	/*
	 * qiulinhe: 2015年7月29日14:01:49: 切换界面,删掉+号按钮
	 */
	private void deleteAddMenu(){
		<span style="font-size:24px;color:#ff0000;">b1.setVisibility(View.GONE);//隐藏按钮</span>
	}

当Android的工程越来越大。xml文件越来越多时,避免不了两个xml文件中同样的组件使用同样的id名字,gen目录下的R.java文件中,有关id的声明都在id的class中,即public static final class id{};当两个xml文件中同样的组件,比如Button,有可能很多个文件中,都有id=”@+id/Button”,开始以为在Java类中引用会重复的id造成程序的不识别。

后来偶然一次错误发现,只需你setContentView(R.layout.updatemyaddressbook);中的xml文件以及这个xml文件相关的xml文件中的id不重复,在类中使用findViewById(R.id.Button);时,程序是不会不识别的。

Android,很强大。