2012-09-11 102 views
2

我一直在尋找這幾天現在,但無濟於事(還!)如何在多個文本視圖中動態設置文本大小,形成列表視圖的行?

正如問題所說 - 我試圖動態地改變顯示在列表視圖中的文本的大小。我的xml設置爲將listview中的每一行描述爲具有圖像視圖(圖標)和文本視圖(標籤)。

我想調整在列表視圖中所有的「標籤」 textviews內文本的大小一氣呵成,在兩種情況下:響應 1)點擊一個按鈕,在應對當前的活動 2)到從共享偏好讀取的值

我相信我可以使用setTextAppearance方法。這是我的代碼 - 它運行時沒有錯誤,但它也沒有預期的效果!

我會非常感謝您對此有任何想法。最良好的祝願史蒂芬

import android.content.Context; 
import android.content.SharedPreferences; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class IndexCustomAdapter extends ArrayAdapter<String> 
{ 
LayoutInflater inflater; 
String[] indexContents; 
String[] scores; 

private SharedPreferences spSettings; 

public IndexCustomAdapter(Context context, int indexRowId, String[] objs) 
{ 
    super(context, indexRowId, objs); 
    inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    indexContents = objs; 
    spSettings = getContext().getSharedPreferences("settings", 0); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) 
    { 
     convertView = inflater.inflate(R.layout.indexrow, parent, false); 
    } 

    TextView label = (TextView) convertView.findViewById(R.id.label); 
    ImageView icon = (ImageView) convertView.findViewById(R.id.icon); 

    // Select the correct text size 
    int fontSize = spSettings.getInt("fontSize", 16); 
    switch (fontSize) 
    { 
     case 24: 
      label.setTextAppearance(getContext(), android.R.attr.textAppearanceLarge); 
      break; 
     case 20: 
      label.setTextAppearance(getContext(), android.R.attr.textAppearanceMedium); 
     case 16: 
      label.setTextAppearance(getContext(), android.R.attr.textAppearanceSmall); 
    }  

    label.setText(indexContents[position]); 
    } 
} 
+0

你的'fontSize'在生成'ListView'時是否改變? – slybloty

+0

是的,在生成列表視圖後字體大小發生了變化 - 並且列表視圖應該相應地更新相同的項目,但更大的字體大小。嗯... – Steven

回答

2

在您的按鈕的onClickListener新的字體大小保存到共享偏好,然後使用notifyDataSetChanged方法。我在想這樣的事情。

button.SetOnclickListener(new OnclickListener(){ 
    public void onClick(View v){ 
     //Update shared preferences with desired 
     //font size here 

     //Instance of your IndexCustomAdapter that you attatched to your listview 
     indexCustomAdapter.notifyDataSetChanged(); 

    } 
}) 
+1

太好了,謝謝我沒有意識到notifyDataSetChanged()方法,但它只是票。對於任何感興趣的人來說,使用setTextSize(TypedValue,value)方法最終會更好地工作: int fontSize = spSettings.getInt(「fontSize」,16); label.setTextSize(TypedValue.COMPLEX_UNIT_DIP,fontSize); – Steven

相關問題