如何实现EditText随ScrollView高度变化,到达屏幕底部固定
1个回答
展开全部
在布局中放置两个EditText,一个设置为android:layout_below="@id/scrollview,称为“EditText1”另一个设置为android:layout_alignParentBottom="true",称为“EditText2”布局很简单,这里就不贴代码了
首先隐藏EditText2,计算ScrollView的高度或者EditText1的坐标,如果大于屏幕高度,就隐藏EditText1,显示EditText2,计算方法有很多种,这里先贴一种我使用的方法,但不管用哪种计算方法,都要注意调用view.post(new Runnable(){});把计算的代码放到线程里,不然计算的结果永远是0;
EditText1.post(new Runnable() {
@Override
public void run() {
int[] position = new int[2];
EditText1.getLocationInWindow(position);
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
if (position[1] + EditText1.getHeight() > wm
.getDefaultDisplay().getHeight()) {
EditText1.setVisibility(View.GONE);
EditText2.setVisibility(View.VISIBLE);
}
}
});
通过运行程序,确认这种方法是可行的,但是还有一个问题,当点击EditText弹出软键盘时,EditText2会自动上移,而EditText1被软键盘挡住了,通过查阅网上的资料,总体来说,有四种解决方案
方法一
在你的activity中的oncreate中setContentView之前写上这个代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
首先隐藏EditText2,计算ScrollView的高度或者EditText1的坐标,如果大于屏幕高度,就隐藏EditText1,显示EditText2,计算方法有很多种,这里先贴一种我使用的方法,但不管用哪种计算方法,都要注意调用view.post(new Runnable(){});把计算的代码放到线程里,不然计算的结果永远是0;
EditText1.post(new Runnable() {
@Override
public void run() {
int[] position = new int[2];
EditText1.getLocationInWindow(position);
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
if (position[1] + EditText1.getHeight() > wm
.getDefaultDisplay().getHeight()) {
EditText1.setVisibility(View.GONE);
EditText2.setVisibility(View.VISIBLE);
}
}
});
通过运行程序,确认这种方法是可行的,但是还有一个问题,当点击EditText弹出软键盘时,EditText2会自动上移,而EditText1被软键盘挡住了,通过查阅网上的资料,总体来说,有四种解决方案
方法一
在你的activity中的oncreate中setContentView之前写上这个代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询