【问题标题】:android dynamically change text sizeandroid动态改变文字大小
【发布时间】:2014-08-23 18:05:41
【问题描述】:

我的按钮布局如下

<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" />

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

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

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

当按钮宽度为 420 像素时,50 像素很棒,但如果按钮宽度只有 200 像素,我需要能够减小文本大小,以便无论大小看起来都一样

任何帮助表示赞赏

标记

编辑

请求的活动代码

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

【问题讨论】:

  • 显示您为按钮实现的代码

标签: android button dynamic size


【解决方案1】:

不要使用像素。使用 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 - 找到缩放因子以“将它们转换为 dp”。
2 - 将你的值乘以这个因子。

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

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

    final float scale = metrics.density;

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

【讨论】:

    【解决方案2】:

    首先,文本大小应以 sp 为单位,小部件和组件的大小应以 dp 为单位。 其次,动态大小根据视口大小变化而变化,就像在不同设备上一样,需要您为它们创建不同的布局文件,而不是根据视图大小进行动态扩展或收缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2014-10-07
      • 2013-08-14
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多