发表于: 2018-11-04 22:35:56
2 873
一、今天完成的事情
解决EditText和ScrollView的滚动冲突
当EditText外层使用ScrollView来让整个界面滑动时,用户触摸EditText区域时不能再显示折叠的文字,而只是滑动了整个srollview。解决方法:
先给EditText设置OnTouchListener,然后先在OnTouch方法中推断当前点击的区域是否为EditText。假设为EditText区域则再推断能否够在垂直方向上进行滚动,假设能够滚动则将事件交由EditText处理,否则将事件交由ScrollView处理。
public class MainActivity extends Activity implements View.OnTouchListener {
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edit_text);
mEditText.setOnTouchListener(this);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//触摸的是EditText而且当前EditText能够滚动则将事件交给EditText处理,否则将事件交由其父类处理
if ((view.getId() == R.id.edit_text && canVerticalScroll(mEditText))) {
view.getParent().requestDisallowInterceptTouchEvent(true);
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
view.getParent().requestDisallowInterceptTouchEvent(false);
}
}
return false;
}
private boolean canVerticalScroll(EditText editText) {
//滚动的距离
int scrollY = editText.getScrollY();
//控件内容的总高度
int scrollRange = editText.getLayout().getHeight();
//控件实际显示的高度
int scrollExtent = editText.getHeight() - editText.getCompoundPaddingTop() -editText.getCompoundPaddingBottom();
//控件内容总高度与实际显示高度的差值
int scrollDifference = scrollRange - scrollExtent;
if(scrollDifference == 0) {
return false;
}
return (scrollY > 0) || (scrollY < scrollDifference - 1);
}
}
dp、dpi、px、ppi、sp
px:pixel,像素,电子屏幕上组成一幅图画或照片的最基本单元
ppi: pixel per inch,每英寸像素数,该值越高,则屏幕越细腻
dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻
dp:Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度,
用了dp作为单位之后,dp相同之后,在不同的设备里面,转成px之后是相等的,不用担心比例失调。
sp: scale-independent pixel,安卓开发用的字体大小单位,
当文字尺寸是“正常”时1sp=1dp,而当文字尺寸是“大”或“超大”时,1sp>1dp。
换算公式:
1pt= (DPI / 72) px
dpi=ppi
ppi= 屏幕对角线上的像素点数/对角线长度 = √ (屏幕横向像素点^2 + 屏幕纵向像素点^2)/对角线长度
1dp=(屏幕ppi/ 160)px
二、明天计划的事情
完成查看护工信息和雇主信息
三、遇到的问题
四、收获
了解了一波 dp、dpi、px、ppi、sp
评论