相关文章推荐
卖萌的紫菜汤  ·  一文回顾 AI4Science ...·  1 月前    · 
爱玩的电影票  ·  Vue项目npm install ...·  5 月前    · 
发呆的拖把  ·  使用Draggable和DragTarget ...·  11 月前    · 
强悍的毛衣  ·  access ...·  1 年前    · 

今天在使用PopWindow.showAtLocation(View parent, int gravity, int x, int y)时,最后2个参数的传值问题,
1.首先使用了View.getLocationOnScreen(new Location[]) 或者 getLocationInWindow(new Location[]);
获取到的location[0]及location[1]有时为0
2.使用View.getGlobalVisibleRect(new Rect());
获取rect.left view距屏幕左边的间距,rect.top view距屏幕上边的间距;
获取到的值不为0;

最终解决:

int p1 = Util.dip2px(168);
int[] location = new int[2];
parent.getLocationInWindow(location);
int l1 = location[0];
int l2 = location[1];
if (l1 == 0 || l2 == 0) {
    Rect rect = new Rect();
    parent.getGlobalVisibleRect(rect);
    l1 = rect.left;
    l2 = rect.top;
pop.showAtLocation(parent, Gravity.NO_GRAVITY, l1 - p1, l2);
今天在使用PopWindow.showAtLocation(View parent, int gravity, int x, int y)时,最后2个参数的传值问题,1.首先使用了View.getLocationOnScreen(new Location[]) 或者 getLocationInWindow(new Location[]);获取到的location[0]及location[1 view .get Location On Screen ( location ); 这样就可以得到该视图在全局坐标系 的x,y值,(注意这个值是要从屏幕顶端算起,也就是说包括了通知栏的高度) //获取在当前屏幕内的绝对坐标 location [0] x坐标 location [1] y坐标 应用 ,我们可以用来记录上一次list view 滚动到了那里 首先我们需要一个记录当前滚动位置的全局变量: 代码如下:private float O
在对单击按钮的响应 ,在Image View (或其他视图)上调用get Location On Screen ()会给出正确的值. 但是当从Activity :: onCreate()调用get Location On Screen ()时,我只得到[0,0].我怎样才能 解决 这个问题? 是否onCreate()太早,无法进行所有计算?是否有更好的地方可以挂钩来开始动画? 现在检查onCreate() 的getLoc...
1.当需要调节popwindow的位置时,new PopupWindow(content View , LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true)用固定的坐标给定,不然没有反应,就像这样new PopupWindow(content View ,300,300, true); 而且位置的确定,其实就是某一个的上下左右,用 view .get Location On Screen ( location ); 就可以获取横纵坐标,然后 view .getheight和getwidth来确定哪个方位;比如popwindow再button下面: popupWindow.showAt Location ( view , Gravity.NO_GRAVITY, location [0], location [1]+popupWindow.getHeight()); 2.就是进出的方式,我把duration持续时间 等单词翻译成我们需要的意思,自己看着对应理解就好。 3.大家一起学习
从原点向右是X轴的正方向,从原点向下是Y轴的正方向 View 提供了get Location On Screen ( int[] location )方法来获取在整个屏幕内的绝对坐标,该坐标值为 View 左上角的坐标。注意该 View 的坐标值是从屏幕左上角开始获取的,所以也包括了通知栏的高度 该方法的具体实现 * <p>Computes the coordinates of this view on the screen . The argument * must be an array
在onCreate的时候去取,肯定是0,因为那个时候UI还没有渲染完毕。 只能在你后续的注册的事件 调用方法。 get Location On Screen ,计算该视图在全局坐标系 的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标  get Location InWindow ,计算该视图在它所在的widnow的坐标x,y值,//获取在整个窗
最近做项目时,发现在activity的onCreate()和onResume()方法里调用 View .get Location InWindow()时, View .get Location InWindow()返回空值,觉得很奇怪,因为以前用过,没有发现这个问题,于是调查了一下源码,这里把调查结果做个记录。 首先,看看 View .get Location InWindow()的实现, publi
1)键盘在scroll view 外面,布局写死,默认隐藏。 1)点击输入框显示键盘。 1)用键盘高度减去edittext高度得到scroll view 移动距离,进行scroll view 内容移动。 今天美工说不是这种效果: 如果不用scroll view ,就还是原来的效果,那么就写死一个 view 在dialod里面作为键盘,默认隐藏,主要是怎么顶布局,移的距离计算还是上面那种做法。 总结:需要注意几个地方: 1)隐藏系统键盘但光标正常显示 EditText et = view Holder.get View (R.id.id_et); * 禁止Edittext弹出软件盘,光标依然正常显示,并且能正常选取光标 public static void disableShowSoftInput(EditText editText) { Class cls = EditText.class; Method method; try { method = cls.getMethod("setShowSoftInputOnFocus", boolean.class); method.setAccessible(true); method.invoke(editText, false); } catch (Exception e) { e.printStackTrace(); 1)计算输入的edittext与键盘高度差,再对root View 进行scrollBy滚动(顶布局)。 root View .postDelayed(new Runnable() { @Override public void run() { int[] etSize = new int[2]; et.get Location On Screen (etSize); int etH = etSize[1]; int[] kbSize = new int[2]; keyBoard View .get Location On Screen (kbSize); int kbH = kbSize[1]; moveH = etH - kbH + et.getMeasuredHeight(); Log.i(TAG, "--->>>moveH:" + moveH); if (moveH > 0) { root View .scrollBy(0, moveH); }, 100); 1)edittext选 和清楚选 。 private void selectAll(EditText currentEt) { et = currentEt; et.setSelectAllOnFocus(true); private void clearSelectAll() { if(et != null){ //取消全选,主要是clearFocus起作用 et.setSelectAllOnFocus(false); et.clearFocus(); 1)要顶开的id_kb_root布局高度要设置成match_parent才行。 因为root View .scrollBy其实是滚动的root View 的内部的孩子,如果是写死比如600dp,那么孩子滚动的时候其实是再root View 的600dp里面滚动的,就不会顶出到屏幕外面去。 1)自动将edittext 内容全选并获取焦点: et.setSelectAllOnFocus(true);//获得焦点时全选文本 et.requestFocus(); //请求获取焦点
private RelativeLayout root; private BounceCircle messageCount; private BounceCircle contactCount; private Image View messageIcon; private Image View contactIcon; private int radius = 40; // 圆形半径 private boolean init = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContent View (R.layout.activity_main); root = (RelativeLayout) find View ById(R.id.activity_main); messageIcon = (Image View ) find View ById(R.id.message_icon); contactIcon = (Image View ) find View ById(R.id.contact_icon); @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); // 只需执行一次,在onWindowFocusChanged方法 才能获取到控件在屏幕 的坐标 if (init) { init =false; int[] position = new int[2]; messageIcon.get Location On Screen (position); messageCount = new BounceCircle(this, radius, position[0] + messageIcon.getWidth(), (position[1] - Util.getTopBarHeight(this))); messageCount.setNumber("20"); messageCount.setFinishListener(new BounceCircle.FinishListener() { @Override public void onFinish() { Toast.makeText(MainActivity.this, "message count dismiss", Toast.LENGTH_LONG).show(); root.add View (messageCount); contactIcon.get Location On Screen (position); contactCount = new BounceCircle(this, radius, position[0] + contactIcon.getWidth(), (position[1] - Util.getTopBarHeight(this))); contactCount.setNumber("30"); contactCount.setFinishListener(new BounceCircle.FinishListener() { @Override public void onFinish() { Toast.makeText(MainActivity.this, "contract count dismiss", Toast.LENGTH_LONG).show(); root.add View (contactCount); 记录一下get Location On Screen 方法的作用 * <p>Computes the coordinates of this view on the screen . The argument * must be an array of two integers. After ...
get Location On Screen 此方法主要为了获取控件在屏幕的位置的x,y坐标。使用的时候需要传入一个int [] 型的参数,int[0]位x轴 同样也可以视为矩形的Left边界 int[1]为y轴,同样可以视为矩形Top的边界。
* &lt;p&gt;Computes the coordinates of this view in its window. The argument * must be an array of two integers. After the method returns, the array
以下是一个简单的 Android 气泡框代码示例: 首先,创建一个自定义的布局文件 `custom_tooltip.xml`,包含一个 LinearLayout 和一个 Text View : <LinearLayout xmlns: android ="http://schemas. android .com/apk/res/ android " android :id="@+id/tooltip_container" android :layout_width="wrap_content" android :layout_height="wrap_content" android :background="@drawable/tooltip_background" android :orientation="horizontal" android :padding="8dp"> <Text View android :id="@+id/tooltip_text" android :layout_width="wrap_content" android :layout_height="wrap_content" android :textColor="@ android :color/white" /> </LinearLayout> 然后,在你的 Activity ,使用 PopupWindow 来显示气泡框。示例代码如下: // inflate the custom layout View tooltip View = LayoutInflater.from(this).inflate(R.layout.custom_tooltip, null); // set the text of the Text View Text View tooltipText = tooltip View .find View ById(R.id.tooltip_text); tooltipText.setText("Hello, world!"); // create a new PopupWindow PopupWindow tooltip = new PopupWindow(tooltip View , View Group.LayoutParams.WRAP_CONTENT, View Group.LayoutParams.WRAP_CONTENT); // set the PopupWindow to be focusable tooltip.setFocusable(true); // show the PopupWindow at a specified location int[] location = new int[2]; target View .get Location On Screen ( location ); tooltip.showAt Location (target View , Gravity.NO_GRAVITY, location [0], location [1] - tooltip.getHeight()); 这里,`target View ` 是你想要在其上显示气泡框的 View 。` location ` 数组包含 `target View ` 在屏幕上的 x 和 y 坐标。我们使用 `showAt Location ` 方法来显示气泡框,并将其放置在 `target View ` 的下方。