Android 如何将 table 对齐到单元格位置
Android how to align table to cell position
我有第一个 Table布局,其中的行和单元格由代码动态生成。
现在,我有第二个 Table由 3 行组成的更小的布局。
单击第一个 Table.
中的任意单元格可显示第二个 table
现在我的问题是:
我如何将第二个 Table 对齐到单击单元格的位置,与第一个 table?
重叠
谢谢指教。
编辑:不幸的是我无法向 public 显示布局。但我画了它应该如何。很抱歉给您带来不便。
first table. click on cell
show the second table at the senter of cell clicked
您可以选择使用自定义对话框片段来执行此操作。
首先,获取您单击的第一个 table 视图的单元格的全局 x 和 y 位置。来自 this post:
Rect myViewRect = new Rect();
myView.getGlobalVisibleRect(myViewRect);
float cx = myViewRect.exactCenterX();
float cy = myViewRect.exactCenterY();
然后,创建一个扩展 DialogFragment 的 class(我们称之为 SecondTableFragment
)。要从默认的 Android 样式对话框更改对话框,您需要做一些事情
使标题消失
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
设置对话框的宽度以适合您的第二个 table 视图
@Override
public void onResume() {
getDialog().getWindow().setLayout([PARENT_LAYOUT_TYPE].LayoutParams.WRAP_CONTENT, [PARENT_LAYOUT_TYPE].LayoutParams.WRAP_CONTENT);
super.onResume();
}
Set the position of your dialog window 高于您单击的单元格(这很可能也应该在 onCreateDialog()
中完成):
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.cx = cx; //x position
wmlp.cy = cy; //y position
对于填充 Dialog 视图本身背后的逻辑,您需要为第二个 table 布局创建一个新的布局文件(就像您为新的 Activity 所做的那样)并对其进行扩充和像任何其他正常片段一样用相关信息填充它。确保在调用它的 newInstance()
方法时传入您希望对话框所在的 x & y co-ordinates。参见 Google's Documentation
一切设置完成后,您可以使用片段管理器(如果您已经在片段中,则使用 ChildFragmentManager)在第一个 TableLayout 上方显示“第二个 table 对话框”以及相关信息
SecondTableFragment fragment = SecondTableFragment.newInstance(cx, cy, RELEVANT INFORMATION ...);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("secondTable");
if (prev != null) {
ft.remove(prev);
}
ft.add(fragment, "secondTable");
ft.addToBackStack(null);
ft.commitAllowingStateLoss();
fragment.setCancelable(false);
我有第一个 Table布局,其中的行和单元格由代码动态生成。
现在,我有第二个 Table由 3 行组成的更小的布局。
单击第一个 Table.
中的任意单元格可显示第二个 table
现在我的问题是:
我如何将第二个 Table 对齐到单击单元格的位置,与第一个 table?
重叠
谢谢指教。
编辑:不幸的是我无法向 public 显示布局。但我画了它应该如何。很抱歉给您带来不便。
first table. click on cell
show the second table at the senter of cell clicked
您可以选择使用自定义对话框片段来执行此操作。
首先,获取您单击的第一个 table 视图的单元格的全局 x 和 y 位置。来自 this post:
Rect myViewRect = new Rect();
myView.getGlobalVisibleRect(myViewRect);
float cx = myViewRect.exactCenterX();
float cy = myViewRect.exactCenterY();
然后,创建一个扩展 DialogFragment 的 class(我们称之为 SecondTableFragment
)。要从默认的 Android 样式对话框更改对话框,您需要做一些事情
使标题消失
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
设置对话框的宽度以适合您的第二个 table 视图
@Override
public void onResume() {
getDialog().getWindow().setLayout([PARENT_LAYOUT_TYPE].LayoutParams.WRAP_CONTENT, [PARENT_LAYOUT_TYPE].LayoutParams.WRAP_CONTENT);
super.onResume();
}
Set the position of your dialog window 高于您单击的单元格(这很可能也应该在 onCreateDialog()
中完成):
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.cx = cx; //x position
wmlp.cy = cy; //y position
对于填充 Dialog 视图本身背后的逻辑,您需要为第二个 table 布局创建一个新的布局文件(就像您为新的 Activity 所做的那样)并对其进行扩充和像任何其他正常片段一样用相关信息填充它。确保在调用它的 newInstance()
方法时传入您希望对话框所在的 x & y co-ordinates。参见 Google's Documentation
一切设置完成后,您可以使用片段管理器(如果您已经在片段中,则使用 ChildFragmentManager)在第一个 TableLayout 上方显示“第二个 table 对话框”以及相关信息
SecondTableFragment fragment = SecondTableFragment.newInstance(cx, cy, RELEVANT INFORMATION ...);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("secondTable");
if (prev != null) {
ft.remove(prev);
}
ft.add(fragment, "secondTable");
ft.addToBackStack(null);
ft.commitAllowingStateLoss();
fragment.setCancelable(false);