gpt4 book ai didi

android - 如何在 Android 的不同屏幕密度上正确制作位图中的文本?

转载 作者:行者123 更新时间:2023-11-30 04:07:57 27 4
gpt4 key购买 nike

我是 android 编程的新手,但有些人为我编写了一个小部件,但他们做的事情与我想要的有点不同......他们设置了所有的小部件中的文本显示为位图而不是 TextView 。这并没有给我我想要的控制权。让我发布我所拥有的代码,看看是否有人可以提供帮助。这是它的 .java 代码:

    String strHourFormat = "hh:mm";
String strDateFormat = "MM.dd.yy";
SimpleDateFormat fHour = new SimpleDateFormat(strHourFormat);
SimpleDateFormat fDate = new SimpleDateFormat(strDateFormat);
Date date = new Date();
String am = date.getHours() > 11 ? "PM":"AM";

setContentView(R.layout.widget_ui);
TextView day = new TextView(this);
day = (TextView) findViewById(R.id.day);
day.setText("" + fDate.format( date));
day.setTypeface(Typeface.createFromAsset(this.getAssets(), "roboto_thin.ttf"));

///////////
WidgetBiggs.previousState = WidgetBiggs.getWifiState(getApplication());
SoundDebug.previousState = SoundDebug.getSoundState(getApplication());
// Update each requested appWidgetId
RemoteViews widgetView = WidgetBiggs.buildUpdate(getApplication(), -1);

for(int wid:widgetIds){
//final RemoteViews widgetView = new RemoteViews(getPackageName(),R.layout.widget_ui);
widgetView.setImageViewBitmap( R.id.img_Hour, updateFontText(""+fHour.format(date),40,100,84,100,60));
widgetView.setImageViewBitmap( R.id.img_AM, updateFontText(""+am,25,40,84,40,60));
widgetView.setImageViewBitmap( R.id.img_Day, updateFontText("" + fDate.format( date),38,150,40,150,40));
//widgetView.setImageViewBitmap( R.id.img_Weather, updateFontText(getWeatherGoogle().toString(),25,120,30,120,30));

介于两者之间的其他一些东西......

private Bitmap updateFontText(String time, int size, int width, int height, int widthText, int heightText) 
{
Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
Canvas myCanvas = new Canvas(myBitmap);
Paint paint = new Paint();
Typeface clock = Typeface.createFromAsset(this.getAssets(),"roboto_thin.ttf");
paint.setAntiAlias(true);
paint.setSubpixelText(true);
paint.setTypeface(clock);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setTextSize(size);
paint.setTextAlign(Align.RIGHT );
myCanvas.drawText(time, widthText, heightText, paint);
return myBitmap;

这是我开始的 XML:

<TextView
android:id="@+id/day"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal|center_vertical"
android:textSize="32dp">
</TextView>

这会导致我的应用程序出现问题。如果您看到任何突出的内容,请告诉我。我想把位图文本拿出来,然后把textview文本放进去。谢谢!

最佳答案

他们的位图策略没有错。只需根据屏幕密度更改“尺寸”参数即可。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

现在将您的大小宽度高度widthTextheightText相乘> 按 metrics.density 计算的值。

这会将它们视为 dp 值,以便为您所在的屏幕生成正确的 px 值。

来自文档:

The DisplayMetrics.density field specifies the scale factor you must use to convert dp units to pixels, according to the current screen density. On a medium-density screen, DisplayMetrics.density equals 1.0; on a high-density screen it equals 1.5; on an extra high-density screen, it equals 2.0; and on a low-density screen, it equals 0.75. This figure is the factor by which you should multiply the dp units on order to get the actual pixel count for the current screen.

如果坚持使用位图,您将更好地控制字体渲染。

关于android - 如何在 Android 的不同屏幕密度上正确制作位图中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11321587/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com