簡體   English   中英

如何從其他活動更改TextSize

[英]How to change TextSize from a different activity

我正在使用viewpager顯示文本。 我想更改顯示的文本的文本大小。 我遇到的問題是該按鈕在擴展Activity的類中,該Activity將適配器設置為viewpager,而我要更改其大小的Textview在另一類中擴展了PagerAdapter。

這是我嘗試過的代碼。 我的主班:

public class NewsDisplay extends Activity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.news_pager);

.
.
.
.
 ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);

 adapter = new NewsSlider(NewsDisplay.this, newsList);
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(position);
   }

}

這是用戶從中單擊以更改文本大小的選項菜單:

public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
         MenuInflater menuInflater = getMenuInflater();
         menuInflater.inflate(R.menu.menu, menu);
         return true;
   }  

這是我處理點擊事件的地方:

public boolean onOptionsItemSelected(MenuItem item)
    {

       switch (item.getItemId())
        {
        case R.id.menu_textSize:
            NewsSlider.news_content.setTextSize(25);
            return true;

        }
    } 

這是我的類,它擴展了PagerAdapter:

public class NewsSlider extends  PagerAdapter {

Context context;

 LayoutInflater inflater;
 private ArrayList<HashMap<String, Object>> newsListArray;
 public static TextView news_content;  // This is the textview size i want to change

public NewsSlider(Context context,ArrayList<HashMap<String, Object>> d)  {

    newsListArray = d;
    inflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}
.
.
.
public Object instantiateItem(ViewGroup container, int position) {

news_content = (TextView) itemview.findViewById(R.id.news_description);
Spanned s = Html.fromHtml(newsinfo.get("news_content").toString());

    news_content.setText(s);
}

當我單擊textsize菜單時,大小沒有變化。 嘗試在pageradapter中創建選項menyu,但它給了我錯誤。 請幫我解決這個問題...

第一個問題是保持對UI中任何內容的靜態引用。

公共靜態TextView news_content;

進行設置以確保您的整個視圖和活動以及與之關聯的所有內容都將保留在內存中,直到關閉整個應用程序進程為止。 這屬於您可以做的事情,但絕不應該做。

與之特別相關的第二個問題是它的ViewPager。 假設您有多個頁面,它將膨脹多個視圖,因此最后膨脹的TextView將是您要調用的那個。 根據設計,ViewPager會在當前正在查看的視圖之前和之后創建視圖,因此,幾乎可以保證永遠不會看到該視圖,除非滾動到最后一個視圖,然后單擊菜單,否則可以。

我要做的是,當您單擊菜單時,將某種消息發布到總線上,並使實例化頁面監聽該消息。 您可以使用LocalBroadcastManager,但我可能會使用greenrobot。 無論如何,請在InstantiateItem中注冊事件,然后在destroyItem中注銷。

可能需要考慮的另一件事是,如果html包含某種文本大小信息,則在這種情況下,它可能會覆蓋您的設置,盡管我不確定Html.fromHtml情況下的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM