Android 缩放列表视图
我有一个包含textview的listview,我需要在单击按钮时缩放此textview,但我无法做到这一点,我尝试了所有方法覆盖SimpleCorsor适配器并覆盖getview()方法,但无法在单击按钮时缩放textview,按钮在listview之外,我的代码是: 这是listview布局:Android 缩放列表视图,android,listview,zooming,Android,Listview,Zooming,我有一个包含textview的listview,我需要在单击按钮时缩放此textview,但我无法做到这一点,我尝试了所有方法覆盖SimpleCorsor适配器并覆盖getview()方法,但无法在单击按钮时缩放textview,按钮在listview之外,我的代码是: 这是listview布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/bt_rating"
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:button="@android:drawable/btn_star"
android:onClick="onclick"/>
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/FontSizeInListView"
android:gravity="right"
/>
</LinearLayout>
这样我就得到了文本视图,但确保只渲染最后创建的文本,并在缩放中执行tv.settextsize(..)
但只有在页面上创建的最后一个textview会更改,因为我只有该textview的id,因此如何获取所有textview而不仅仅是最后一个创建的textview?在自定义适配器中,添加一个变量(带有公共setter和getter)来表示缩放级别。在
getView
方法中,使用此变量更改文本视图的文本大小(只需将其添加到返回行之前)。必须始终将大小设置为某个值,因为视图是重复使用的
然后,在更改缩放级别的按钮上,更改适配器的缩放变量,然后对其调用
notifyDataSetChanged
,以强制其在所有可见视图上调用getView
。(这是假设您将ArrayAdapter子类化)。我所做的工作是:
adapter =new SimpleCursorAdapter(this,R.layout.rating,cu,new String[]{"Title","Fav"}, new int[]{R.id.text1,R.id.bt_rating},CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
//added in last update
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){
/** Binds the Cursor column defined by the specified index to the specified view */
public boolean setViewValue(View view, Cursor cursor, int columnIndex){
if(view.getId() == R.id.text1){
tv=(TextView)view;
tv.setTextSize(SizeOfTextInListView);
}
}))
在“缩放”按钮中:
//zoom in button click
final Button zoom_in_btn = (Button) findViewById(R.id.button_zoom_in);
zoom_in_btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(Zoom_counter<10){
SizeOfTextInListView= SizeOfTextInListView+Zoom_In_Out_value;
adapter.notifyDataSetChanged();
Zoom_counter++;
}
}
});
//放大按钮点击
最终按钮zoom_in_btn=(按钮)findViewById(R.id.Button_zoom_in);
放大\u btn.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
如果(Zoom_Counter你需要一个自定义列表适配器。如果你已经在使用一个,你能发布你的getView方法吗?我想它开始工作了,我做了一些其他的事情,它开始工作了。明天就会看到。因为在我的方法中,我有一个文本视图,它变大了,其他的很少,但其余的保持不变。我会看看如何解决这个问题。但是在least它起作用了。如果你不在getView
中修改它,你会有很多像你刚才描述的不可预测的行为。列表视图定期回收刚刚从屏幕上滚动下来的视图,作为滚动到屏幕上的新视图使用。当一个视图被回收时,它只会改变你在g中告诉它要改变的内容etView
。
//zoom in button click
final Button zoom_in_btn = (Button) findViewById(R.id.button_zoom_in);
zoom_in_btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(Zoom_counter<10){
SizeOfTextInListView= SizeOfTextInListView+Zoom_In_Out_value;
adapter.notifyDataSetChanged();
Zoom_counter++;
}
}
});