我尝试使用textView
和getTop()
方法获得getLeft()
的位置,但它们总是返回0.我从onCreate()调用此方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.hello);
int top = textView.getLeft();
int left = textView.getLeft();
int height = textView.getHeight();
Log.i("top", "top = " + top);
Log.i("left", "left = " + left);
Log.i("height", "height = " + height);
答案 0 :(得分:2)
我找到了答案。只需使用getViewTreeObserver().addOnGlobalLayoutListener
并在此方法中调用getLeft,getTop等。
答案 1 :(得分:1)
此时尚未看到textview。您需要在活动的生命周期中将那些稍后调用(请参阅下面的文档)。
一旦onCreate()完成执行,系统就会调用onStart() 和onResume()方法快速连续。你的活动从未 驻留在“已创建”或“已启动”状态。从技术上讲,这项活动 调用onStart()时,对用户可见,但onResume() 快速跟进并且活动保持在恢复状态直到 发生了一些改变
的事情
答案 2 :(得分:1)
布局传递完成后,将触发布局侦听器。它与特定的活动生命周期无关,因此您必须在布局过程中添加观察者。
view.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
// Now you may get the left/top/etc.
getCoordsFromView(view);
// Optionally remove the listener so future layouts don't change the value
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});