如何从不同的活动更改文本大小

时间:2014-07-12 01:53:41

标签: android textview

我正在使用viewpager显示文本。我想更改显示的文本的文本大小。我遇到的问题是按钮是在类中扩展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);
}

当我点击文本大小菜单时,大小不会改变。 Itried在pageradapter中创建选项menyu,但它给了我错误。请帮我解决这个问题...

1 个答案:

答案 0 :(得分:1)

第一个问题是保持对UI中任何内容的静态引用。

public static TextView news_content;

设置将确保您的整个视图和Activity及其相关内容将保留在内存中,直到整个应用程序进程关闭为止。这属于你可以做的事情,但绝不应该这样做。

与此相关的第二个问题是它的ViewPager。假设您有多个页面,它会对多个视图进行充气,因此最后一个TextView充气将是您正在呼叫的那个。根据设计,ViewPager将在您当前正在查看的视图之前和之后创建视图,因此您几乎可以保证永远不会在视觉上看到此工作,除非您滚动到最后一个视图然后点击菜单。

当您单击菜单时,我会做的是将某种消息发布到总线,并让您的实例化页面监听该消息。你可以使用LocalBroadcastManager,但我可能会使用greenrobot。无论如何,在instantiateItem中注册事件,并在destroyItem中注销。

可能需要考虑的另一件事是,如果html包含某种文字大小的信息,在这种情况下,它可能会覆盖你的设置,虽然我不确定它是如何工作的在Html.fromHtml案例中。