ListView в ScrollView - небольшая ошибка
Я хотел бы иметь просмотр списка в scrollview. Этот метод делает это почти идеально:https://stackoverflow.com/a/3495908/2811653
При вводе большего количества текста, чем помещается в одну строку, возникает ошибка:
1:http://abload.de/img/screenshot_2013-10-311jq5t.jpg
2:http://abload.de/img/screenshot_2013-10-31lvrad.jpg
Прокрутка вниз до кнопки работает нормально, НО, как вы видите на втором скриншоте, P отображается неправильно :-(
В классе Utility высота вычисляется неправильно, когда я заполняю первую строку списка таким образом.
Кто-нибудь знает как это исправить?
(Подсказка: главное, я хочу прокрутить до кнопки, которая находится под списком. Я нея хочу, чтобы кнопка всегда отображалась (поэтому нет веса = 1))
Код:
package com.example.tmpapplication;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
public class MainActivity extends ListActivity {
static final String[] data=new String[]
{
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListAdapter(new ArrayAdapter(this, R.layout.list, data));
ListView listView=(ListView) findViewById(android.R.id.list);
Utility.setListViewHeightBasedOnChildren(listView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
class Utility {
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
}
XML: activity_main.xml
list.xml: