android动态改变文本大小

时间:2014-08-23 08:58:24

标签: android button dynamic size

我的按钮布局如下

<Button
        android:id="@+id/Button01"
        android:layout_width="420px"
        android:layout_height="120px"
        android:background="@drawable/butt1"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:onClick="clk_fault"
        android:text="Enter Fault"
        android:textColor="#FFFF00"
        android:layout_marginTop="100px"
        android:textSize="50px" />

当活动开始时,我运行获取显示宽度的代码,然后根据设备的分辨率调整按钮大小

这一切都运行正常,但文字大小始终保持不变

有没有办法根据包含文字的按钮大小来增加文本大小?

当按钮宽度为420px时,50px非常棒,但如果按钮宽度仅为200px,我需要能够减小文本大小,使其看起来大小相同

任何帮助表示赞赏

标记

修改

要求的活动代码

public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,      WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);
    getWindow().setFormat(PixelFormat.RGBA_8888);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
    setContentView(R.layout.activity_activity1);

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int h = metrics.heightPixels;
    int w = metrics.widthPixels;
    int w1 = (w/2);

    Button txt1 = (Button) findViewById(R.id.Button01);  
    txt1.setLayoutParams(new LinearLayout.LayoutParams(w1, 100));
    setMargins(txt1, 0, 100, 0, 0);

}

public static void setMargins (View v, int left, int top, int right, int bottom) {
    if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(left, top, right, bottom);
        v.requestLayout();
    }
}

2 个答案:

答案 0 :(得分:1)

不要使用px 。对于小部件大小使用 dp ,对于字体大小使用 sp 这样,您将获得完美的可扩展性

sp~dp(几乎等于)。

mdpi 分辨率,1px = 1dp。

在ldpi分辨率下,比例乘数为0.75
mdpi 分辨率下,比例乘数为 1.0
在hdpi分辨率下,比例乘数为1.5
在xhdpi分辨率下,比例乘数为2.0
在xxhdpi分辨率下,比例乘数为3.0
在xxxhdpi分辨率下,比例乘数为4.0

mdpi 将被视为参考解决方案


使用Java代码时,您使用的是像素 这意味着你必须:

1 - 找到缩放因子为&#34;将它们转换为dp&#34;。
2 - 将您的值乘以此系数。

要查找乘数,我使用以下代码:

    final DisplayMetrics metrics =
        Resources.getSystem().getDisplayMetrics();

    final float scale = metrics.density;

现在,您可以将您的值乘以scale并相应缩放像素

答案 1 :(得分:0)

首先,文字大小应该是sp和widget&amp; dp中的组件大小。 其次,基于视口大小变化的动态尺寸变化就像在不同设备上一样,需要您为它们创建不同的布局文件,而不是基于视图尺寸进行动态扩展或收缩。