[英]How to get location of table layout cell in ANDROID
I am adding dynamic row with textview in table layout, Also I want xy coordinates of that textview. 我在表布局中添加带有textview的动态行,而且我还希望该textview的xy坐标。 For that I used
view.getLocationOnScreen(loc)
method. 为此,我使用了
view.getLocationOnScreen(loc)
方法。
But is showing only last item coordinates, I want to show all item coordinates. 但是只显示最后一个项目的坐标,我想显示所有项目的坐标。
This is my source code please help me for that. 这是我的源代码,请为此提供帮助。
Thanks you. 谢谢。
public class MainActivity extends Activity {
TextView tv1, tv2;
TableRow row;
TextView txt;
TableLayout tl;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tl = (TableLayout) findViewById(R.id.tableLayout1);
for (int i = 0; i <= 15; i++) {
row = new TableRow(this);
txt = new TextView(this);
tl.addView(row);
row.addView(txt);
readLocation();
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
readLocation();
}
private void readLocation() {
int[] locationOnScreen = new int[2];
txt.getLocationOnScreen(locationOnScreen);
txt.setText(locationOnScreen[0] + " : " + locationOnScreen[1]);
}
}
and my following xml 和我下面的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TableLayout>
</ScrollView>
You shouldn't try to get those coordinates in onCreate
method in this way since layout procedures are not yet completed at this point. 您不应该尝试以这种方式在
onCreate
方法中获取那些坐标,因为此时布局过程尚未完成。
Here is a little bit modified demo base on your code: 这是根据您的代码进行了一些修改的演示:
public class MainActivity extends Activity {
ArrayList<TextView> txt = new ArrayList<TextView>();
TableLayout tl;
Handler _h = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tl = (TableLayout) findViewById(R.id.tableLayout1);
for (Integer i = 0; i <= 15; i++) {
TableRow therow = new TableRow(this);
TextView thetxt = new TextView(this);
therow.addView(thetxt);
tl.addView(therow);
txt.add(thetxt);
thetxt.setText("stub");
}
tl.requestLayout();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onResume() {
super.onResume();
_h.postDelayed(new Runnable() {
@Override
public void run() {
for (Integer i = 0; i <= 15; i++) {
TextView thetxt = txt.get(i);
int[] locationOnScreen = new int[2];
thetxt.getLocationOnScreen(locationOnScreen);
thetxt.setText(locationOnScreen[0] + " : " + locationOnScreen[1]);
}
}
}, 1000);
}
} }
The key point is postDelayed
in onResume
that lets the system to position all views correctly. 关键点是
onResume
中的postDelayed
,可让系统正确postDelayed
所有视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.