我有以下布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollViewFrameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="30dip">
<ScrollView
android:id="@+id/verticalScrollContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="10dip">
<HorizontalScrollView
android:id="@+id/horizontalScrollContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</HorizontalScrollView>
</ScrollView>
</FrameLayout>
对于水平滚动容器,我以编程方式创建TableLayout并将其添加到HorizontalScrollView。用户可以控制应在表格中显示哪些列。有时,如果用户选择了许多列,则内容可能会溢出屏幕宽度。很多时候,桌子小于屏幕的宽度,我希望它居中。如果不解决居中问题,上面的布局对于从屏幕上溢出的表格来说效果很好。例如。双向滚动有效。但是,当我这样做时:
FrameLayout.LayoutParams lp =
new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, Gravity.CENTER);
theTable.setLayoutParams(lp);
它开始表现得很奇怪。对于内容小于屏幕宽度的时间,它适当地居中。然而,当内容比屏幕宽时,内容居中,迫使桌子的一些左手侧从屏幕的左手侧消失。 E.g。
SSSSSS
SSSSSS
TTTTTTTTTT
SSSSSS
SSSSSS
其中'S'是屏幕,'T'是表格。它也不可能向左滚动以查看截断内容(但向右滚动)。我在找什么:
如果表格小于屏幕宽度,则将其居中。 如果表格宽于屏幕宽度,则左对齐水平滚动。
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
这个解决方案涉及挂钩到我的表的onGlobalLayoutListener,它在布局完成后触发(因此我可以访问表的显示宽度)。这是代码:
final TableLayout table = (TableLayout)findViewById(R.id.the_table);
ViewTreeObserver vto = table.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
public void onGlobalLayout()
{
ViewTreeObserver obs = table.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
int screenWidth =
activity.getWindowManager().getDefaultDisplay().getWidth();
//If the table is smaller than the screen width, setup new layout
//parameters to center the table. Otherwise, leave the table left
//aligned
if (table.getWidth() < screenWidth)
{
FrameLayout.LayoutParams lp =
new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, Gravity.CENTER);
table.setLayoutParams(lp);
}
}