2013-03-11 113 views
2

我正在處理textview上的文字。我想添加兩個按鈕和退出文本視圖中的文本縮放和代碼是這樣文字大小不會減少

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.chapter_view); 
     String chapter; 
     chapter=getIntent().getExtras().getString("ChapterName"); 
     final StringBuffer buffer = new StringBuffer(); 
     int id= getResources().getIdentifier(chapter,"raw",getPackageName());  
     try{ 
      DataInputStream dataIO= new DataInputStream(getResources().openRawResource(id)); 
      String strLine= null; 
      while((strLine = dataIO.readLine())!=null){ 
       buffer.append(strLine); 
       buffer.append("\n"); 
      } 
      dataIO.close(); 
     }catch(Exception e){ 

     } 
     final TextView tv=(TextView) findViewById(R.id.chapter); 
     tv.setText(buffer.toString()); 

     Button zoomIn = (Button) findViewById(R.id.zoomin); 
     zoomIn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       textSize = tv.getTextSize(); 
       tv.setTextSize((float) (textSize+0.25)); 

      } 
     }); 

     Button zoomOut = (Button) findViewById(R.id.zoomout); 
     zoomOut.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       textSize = tv.getTextSize(); 
       tv.setTextSize((float) (textSize-0.25)); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.chapter_view, menu); 
     return true; 
    } 
} 

但我發現了問題是即使在點擊縮小按鈕,它仍然在增加文本的字體大小。請幫我解決這個問題。另外,一旦我關閉了一章並打開另一章,文本大小就會重置爲默認值。有沒有解決方案。我正在考慮爲此解決方案使用namevalue對。

+0

你能告訴我們你在哪裏聲明'tv'的代碼嗎? – 2013-03-11 08:37:59

+0

必須檢查出來。但我的問題是,如果通過增加加大尺寸,它應該減小尺寸,如果減去。 – user2064667 2013-03-11 08:53:50

+0

@ user2064667你的代碼正在工作.. – QuokMoon 2013-03-11 08:58:02

回答

0

至於返回到其默認值的大小,您將不得不使用共享首選項來保存上一次文本大小的值。

至於文字的大小,你爲什麼不通過一個增加值之一,例如tv.setTextSize(TEXTSIZE ++)當點擊縮小(ZoomOut) 或tv.setTextSize(textsize--)點擊zoomIN時

+0

我同意你的意見。但是,如果我給1,文本的大小增加很多。這就是爲什麼我增加slight le。 – user2064667 2013-03-11 08:56:39

0
public class MainActivity extends Activity { 

TextView tv; 

Button in,out; 

static float textSize; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tv = (TextView) findViewById(R.id.textView1); 
    tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,30); 
    textSize = tv.getTextSize(); 

    in = (Button) findViewById(R.id.zoomin); 
    out = (Button) findViewById(R.id.zoomout); 

    in.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      textSize = (float)(textSize + 2); 
      tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize); 

     } 
    }); 

    out.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      textSize = (float)(textSize - 2); 
      tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize); 

     } 
    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 
+0

我試過你的,但還沒有減小尺寸。 – user2064667 2013-03-11 08:59:49

+0

試試我編輯的代碼。我發現這種行爲的原因在這裏:http://stackoverflow.com/a/3687385/1567588 – SKK 2013-03-11 09:26:21

1

問題是傳遞給setTextSize(float size)的單位是按比例縮放的像素,而getTextSize()以像素爲單位報告。改爲使用setTextSize(int unit, float size),將單位設置爲TypedValue.COMPLEX_UNIT_PX

+0

而棘手的是,這種行爲將取決於屏幕密度(SP到PX比率的變化),這可能是爲什麼其他用戶在其設備上運行時,請不要注意到您的代碼存在問題。 – Aert 2013-03-11 09:11:22

1

我試過在我的機器上的一個示例。檢查下面的代碼。您必須將變量放在範圍正確的地方。

public class MainActivity extends Activity { 
    float textSize; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     TextView tv = (TextView)findViewById(R.id.textView1); 
     textSize = tv.getTextSize(); 

     Button btnPlus = (Button)findViewById(R.id.button1); 
     btnPlus.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       TextView tv = (TextView)findViewById(R.id.textView1); 
       Log.v("TextSizeP", String.valueOf(textSize)); 
       textSize = (float) (textSize+0.25); 
       tv.setTextSize(textSize); 
       Log.v("TextSizeP", String.valueOf(textSize)); 
      } 
     }); 

     Button btnMinus = (Button)findViewById(R.id.button2); 
     btnMinus.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       TextView tv = (TextView)findViewById(R.id.textView1); 
       Log.v("TextSize", String.valueOf(textSize)); 
       textSize = (float) (textSize-0.25); 
       tv.setTextSize(textSize); 
       Log.v("TextSize", String.valueOf((float) (textSize-0.25))); 
      } 
     }); 
    } 

    @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; 
    } 

} 

例如我有我的textSize變量在類級別聲明。當點擊相關按鈕時,textSize變量會增加和減少。

這對我來說很好。