多个活动总会要牵扯到一些返回顺序的问题这里把我看的一些东西整理一下,如果你也有一些好方法不妨在这里回帖留下谢谢
android:clearTaskOnLaunch="true" 这个参数意思是 无论何时 这个activity都会从home screen重新启动,也就是只要你按了桌面的图标 这个活动就是第一个发起的。但是唯一要注意的是 如果你按下的是home建 那么意味着这个活动没有结束所以 你在按有时候就不会第一次发起了。只有当你按下back或者结束当前执行的任务 之类 代表能使activity结束的行为 这个活动都会第一次发起。
如果你只有两个activity那么 android:noHistory 方法你可以考虑,他可以不保存顺序,这样都会从第一个启动,用户不可能恢复到第二个状态。
需求是弄一个高度只有一个键的软键盘,能拖动。效果为:
翻开代码,在input_method.xml里面是这样定义的inputView在键盘中的layout:
<FrameLayout android:id="@android:id/inputArea" android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone"> </FrameLayout>
本想,把这个FrameLayout改成HorizontalScrollView就OK了,结果编译后测试,弹出的软键盘为一块黑色,没有任何键,加上红色背景再调试,效果如下:
天呢,怎么会这样?!!
开始定位错误的根源(此处省略一万字,搞死我了这个阶段)
定位到这个位置:KeyboardView.java 的setKeyboard(Keyboard keyboard)方法中的
requestLayout();
这行代码调用后打印this.getWidth()和this.getHeight()都为零,为何???(到现在我也没找到原因,请指点)
只好自己硬把位置大小写进来:
mLeft = 0; mRight = keyboard.getMinWidth(); DisplayMetrics dm = getContext().getApplicationContext().getResources().getDisplayMetrics(); mTop = dm.heightPixels-keyboard.getHeight(); mBottom = dm.heightPixels;
再测还不行,再定位,在onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法中
width = MeasureSpec.getSize(widthMeasureSpec);
被调用后,width又变为了零,哎!!
还是硬方法,把这行代码注释掉。
再编译运行,OK。花了不少时间做这个,走了不少弯路,发在这儿与大家共勉。
首先建一个MoveImageView类,继承ImageView。
添加方法setLocation,设置图片的绝对位置。
public void setLocation(int x,int y) { this.setFrame(x, y- this.getHeight(), x + this.getWidth(), y); }
再添加方法autoMouse,处理onTouchEvent事件,使图片能跟限你的手指走动。
//自动移动 public boolean autoMouse(MotionEvent event) { boolean rb = false; switch (event.getAction()) { case MotionEvent.ACTION_MOVE: this.setLocation((int) event.getX(), (int) event.getY()); rb = true; break; } return rb; }
这样就基本完成了。
完整代码见附件