之前的项目在推进,遇到一个问题是这样的:利用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,很强大。