2013-03-11 3 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' 선언 코드를 알려주십시오. –

+0

체크 아웃해야합니다. 하지만 제 질문은, 더하기로 크기를 늘리면, 마이너스면 크기가 감소해야한다는 것입니다. – user2064667

+0

@ user2064667 코드가 작동 중입니다 .. – QuokMoon

답변

0

기본값으로 돌아가는 크기는 공유 환경 설정을 사용하여 마지막 텍스트 크기 값을 저장해야합니다. zoomOut가 또는 tv.setTextSize이 (textsize--) zoomIN이

을 클릭하면 클릭 예를 tv.setTextSize (TEXTSIZE ++)에 대한 하나에 의해 값을 증가하지 않는 이유 텍스트 크기,에 관해서는

+0

동의합니다. 그러나 1을 주면 텍스트의 크기가 크게 늘어납니다. 그게 내가 왜 가볍게 증가하는지. – user2064667

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

+0

수정 된 코드를 사용해보십시오. 그 이유는 다음과 같습니다. http://stackoverflow.com/a/3687385/1567588 – SKK

1

setTextSize(float size)에 전달 된 단위는 크기가 조정 된 픽셀이며, getTextSize()은 픽셀 단위로보고됩니다. 대신 setTextSize(int unit, float size)을 사용하고 TypedValue.COMPLEX_UNIT_PX으로 설정하십시오.

+0

까다로운 점은 화면 밀도 (화면 비율)가 다른 사용자의 화면 밀도에 달려 있다는 것입니다. 해당 장치에서 코드를 실행할 때 코드에 문제가 있음을 알지 못합니다. – Aert

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 변수는 해당 버튼을 클릭 할 때 증가 및 감소합니다.

나를 위해 잘 작동합니다.

관련 문제