我有这个布局:
<?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:layout_centerInParent="true"
android:layout_centerVertical="true"
android:background="#000"
android:gravity="center_horizontal|center_vertical"
android:orientation="vertical">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal|center_vertical">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/play"
android:gravity="center_horizontal"
android:scaleType="centerInside"
android:text="@string/highScores"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#fff" />
<View
android:layout_width="1dp"
android:layout_height="20dp"></View>
<TableLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal">
</TableLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
我使用以下元素填充'container'TableLayout:
layout.addView(buildTitleRow());
for (int i = 0; i < users.length(); i++) {
JSONObject parent = (JSONObject) users.get(i);
layout.addView(buildRowFrom(parent, i + 1));
}
buildTitleRow:
private TableRow buildTitleRow(){
TableRow result = new TableRow(this);
int color = Color.parseColor("#ffff00");
View view = new View(this);
view.setMinimumWidth(10);
result.addView(view);
view = new View(this);
view.setMinimumWidth(10);
result.addView(view);
//the same for other views
return result;
}
buildRowFrom:
private TableRow buildRowFrom(final JSONObject element, int counter) throws JSONException {
TableRow result = new TableRow(this);
String rowName = element.getString("name");
int color = Color.parseColor("#00ff00");
if(rowName.equals(userName)){
color = Color.parseColor("#ffffff");
}
TextView textView = new TextView(this);
textView.setText(counter + ".");
textView.setTextColor(color);
result.addView(textView);
//some other views
return result;
}
在滚动需要发生之前,这确实很有效......
一旦有比屏幕高度更多的元素,表格仍然可滚动(幸运的是),但原始的“标题”Textview不再显示(你不能再向上滚动)
有没有人知道如何调整布局,以便在添加的元素多于屏幕大小后可以看到它?
非常感谢,
S上。
答案 0 :(得分:1)
我已经尝试过您的代码,发现您的xml布局中发现了一些错误。
属性android:layout_gravity
将改变布局的自身重力。因此,如果将此属性设置为LinearLayout
center
且其android:layout_height
为wrap_content
(意味着&#39; LinearLayout&#39;的实际高度将超过屏幕高度)并填充ScrollView
(其高度是屏幕的高度),LinearLayout
将与其父ScrollView
的中心对齐。
如果您想保留&#39; LinearLayout&#39;的内容居中,您可以将android:fillViewport="true"
设置为ScrollView
,然后LinearLayout
将填充父级,您可以android:gravity="center"
使用LinearLayout
。 Reference
但仍有一些事情需要改变。在您的java代码中,View view = new View(this)
这一行将是新的View
,然后您将其添加到TableLayout
。但由于以下TableLayout
的说明,此View
将充满View
。
* The base class implementation of measure defaults to the background size,
* unless a larger size is allowed by the MeasureSpec. Subclasses should
* override {@link #onMeasure(int, int)} to provide better measurements of
* their content.
您可以使用TextView
之类的具体视图代替它。
我不知道我是否澄清了它。我想如果您删除android:layout_gravity
的属性LinearLayout
,它就会有效。
如果能有所帮助,我很高兴。
答案 1 :(得分:0)
我做了改编Paul建议+改变android:layout_height of ScrollView to&#34; wrap_content&#34;在android:layout_gravity =&#34; center&#34;中保持内部LinearLayout居中被删除(见下面的完整布局)。
如果没有保罗的建议和解释,我不会发现它,所以我接受他的答案作为答案,这个答案只是为了完整...
我并不期待这个问题能得到足够的关注; - )
谢谢保罗:-D
<?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:layout_centerInParent="true"
android:layout_centerVertical="true"
android:background="#000"
android:gravity="center_horizontal|center_vertical"
android:orientation="vertical">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal|center_vertical">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/play"
android:gravity="center_horizontal"
android:scaleType="centerInside"
android:text="@string/highScores"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#fff" />
<View
android:layout_width="1dp"
android:layout_height="20dp"></View>
<TableLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal">
</TableLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>