发表于: 2018-11-04 22:35:56

2 875


一、今天完成的事情

解决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





返回列表 返回列表
评论

    分享到