TextView-プログラムによるテキストサイズの設定が機能していないようです


140

私はEclipse Indigoを使用しており、2つのエミュレーター(2.2および3.0)でテストしています。

以下のコードは私が現在テストしているものを示していますが、エミュレーターを実行しようとしたときにテキストサイズを設定しても画面には何も表示されません(テキストサイズをコメント化すると、テキストは赤い色で表示されます)。どういうわけか日食はコードを再構築していないと思いましたが、青い背景を追加するコード行を追加し、それはうまくいきました。テキストを設定した後、テキストサイズを設定しようとしましたが、まだ成功しません。コードは以下のとおりです。ご協力いただきありがとうございます!(免責事項)-私はxmlから離れようとしています。私はすでにJavaを知っているので、それに依存したくありません。

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

回答:


19

テキストサイズ2は実質的に非表示になります。少なくとも14でそれを試してください。ところで、xmlを使用することには多くの利点があり、「Hello World」よりも複雑なことを実行する必要がある場合は、作業が楽になります。


私は14で試してみます。最初の投稿で言ったように、2が小さすぎても、画面が空白にならないはずです。単にサイズを設定するだけでなく、テキストが既にあったものを超えるスケールとしてそれを読んでいたと思います。-私は見ますが、とにかく尋ねます-デフォルトのサイズは何ですか?まあありがとう。
cspam 2011

ところで-はい、私はxmlに利点があることを理解していますが、それを使った経験はありません。ええ、おそらく簡単に習得できることは知っています。私はすでにJavaに精通しているので、できるだけ多くのクラスに精通することが本当に役立つと思いました。XMLを使用すると、多くのことを隠すことができるようです。
cspam 2011

それはそれを隠さない-それは同じパラメータを持つ同じクラスです。2つを変換できるようになるまでには時間がかかりますが、実際には非常に効率的です。おまけとして、XMLでビューを定義すると、システムはさまざまな画面サイズ、密度、および向きを処理します。コードを変更する必要はなく、レイアウトファイルだけです。
ニコライエレンコフ2011

いくつかの要因に基づいて、実行時にレイアウトと方向を変更できますか?
cspam 2011

それは非常に広い質問ですが、要するに、はい。XMLでUIを定義した場合でも、実行時にビューを追加/削除できます。デフォルトの動作を上書きして、向きの変更を自分で処理することもできます。
Nikolay Elenkov 2011

533

このメソッドTextView.setTextSize(int unit , float size);は2つのパラメータを取ります。

これを試して :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

これこれを参照してください。

更新: これで、setTextSize(float size)テキストサイズが「」単位で自動的に設定されますscaled pixel。COMPLEX_UNIT_SPを手動で言及する必要はありません。ドキュメントを参照してください。


36
これが正解です。より具体的に: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin 14

2
どうもありがとうございました!
DmitryKanunnikoff 2017

72

これで問題が解決しました。すべてのデバイスでフォントサイズを統一しました。

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));

R.dimen.fontは統一された数字ですか、それともデバイスごとにサイズが異なりますか?
The_Martian 2015

私の場合、これらのフォルダーのファイルdimen.xmlでフォントを宣言しました:特定の値を持つ値、values-sw600dp、values-sw720dp。
Vikas 2015

textView.setTextSize(R.dimen.text_size_max)が呼び出された後にTextViewが消えたのは奇妙ですが、あなたのメソッドを使用すると、機能します。
li2

私のために働く。ありがとうございました!
apurv thakkar

24

現在、setTextSize(float size)メソッドは適切に機能するため、テキストサイズを変更するために別のメソッドを使用する必要はありません。

android.widget.TextView.javaソースコード

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

使用例

textView.setTextSize(20); // set your text size = 20sp


12

コードでのテキストサイズの設定の詳細については、このリンクを参照しください。基本的にそれは言う:

public void setTextSize(int単位、浮動小数点サイズ)

導入:APIレベル1デフォルトのテキストサイズを指定された単位と値に設定します。可能な次元単位については、TypedValueを参照してください。関連するXML属性

android:textSizeパラメータ

unit目的の寸法単位。
size指定された単位での望ましいサイズ。


1
私は自分のコードでEclipseをダブルチェックしましたが、インテリセンスによれば、実際にはsetTextSize、setTextSize(float size)、setTextSize(int unit、float size)の2つのオプションがあります。リンクしたドキュメントはこれを確認します。
cspam 2011

右-あなたはそれを試しましたか?また、ニコライ氏は、2は小さい方が見やすいと言っています。
ジャック

はい、しかし問題は、私が今持っている方法でそれを行おうとすると、テキストが表示されないことです。その単なる空白の画面。2が目立たなかったとしても、なぜ画面が空白になるのですか?
cspam 2011

空白ではありません。本当によく見ると、小さな赤いピクセルが見えます:)。サイズを徐々に増やして確認します。
ニコライエレンコフ2011

ちなみに、setTextSize(float)はsetTextSize(COMPLEX_UNIT_SP、float)と同等です。
ニコライエレンコフ2011

10

私の場合、この方法を使用しました:

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

ここでTextViewのTextSizeをプログラムで設定します。

textView.setTextSize(pxFromDp(18, YourActivity.this));

楽しんでください:)


こんにちは@Dhruv Ravalです。この値18が任意の画面密度で有効な場合、または各画面に寸法を作成する必要がある場合に備えて、プロジェクトでフォントサイズを調整できるようにしています。
アルマンドマルケスソブリニョ2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.