2

私はテキストビューでテキストをレンダリングすることに取り組んでいます。テキストビュー内のテキストをズームインおよびズームアウトするための2つのボタンを追加しようとしていますが、コードは次のようになります

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

しかし、私が得ている問題は、ズームアウトボタンをクリックしても、テキストのフォントサイズが大きくなることです。これで私を助けてください。また、ある章を閉じて別の章を開くと、テキスト サイズがデフォルト値にリセットされます。これに関する解決策はありますか。このソリューションに名前と値のペアを使用することを考えています。

4

4 に答える 4

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関連するボタンがクリックされると、変数が増減します。

これは私にとってはうまくいきます。

于 2013-03-11T09:08:09.210 に答える
1

問題は、渡された単位がsetTextSize(float size)スケーリングされたピクセルであるのに対し、getTextSize()レポートはピクセルであるということです。setTextSize(int unit, float size)代わりに、単位を に設定して使用してみてくださいTypedValue.COMPLEX_UNIT_PX

于 2013-03-11T09:00:57.987 に答える
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;
}

}
于 2013-03-11T08:55:10.830 に答える
0

デフォルトに戻るサイズについては、共有設定を使用して最後のテキストサイズの値を保存する必要があります。

テキストサイズについては、たとえば、zoomOutがクリックされたときはtv.setTextSize(textsize ++)、zoomINがクリックされたときはtv.setTextSize(textsize--)のように、値を1つずつインクリメントしてみませんか。

于 2013-03-11T08:51:54.873 に答える