调整Android主屏幕小部件的文本位图大小

时间:2014-07-07 04:11:52

标签: android android-layout widget android-widget android-appwidget

我想创建一个主屏幕小部件,它使用自定义字体显示一段文字。

现在,我使用绘制文本的方法是通过膨胀文本使用的布局,然后我设置文本,最后将该布局转换为位图。代码如下:

//Leveraging view framework to built my text image
View v = LayoutInflater.from(context).inflate(R.layout.item_widget_text, null);
((TextView)v.findViewById(R.id.title)).setText(title);
((TextView)v.findViewById(R.id.subtitle)).setText(subtitle);
v.measure(MeasureSpec.makeMeasureSpec(1040, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
v.layout(0, 0, v.getMeasuredWidth(),v.getMeasuredHeight());

//Creating the bitmap
final Bitmap returnedBitmap = Bitmap.createBitmap(v.getMeasuredWidth(),
            v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
v.draw(canvas);

为了创建要绘制的布局的位图,我需要知道小部件的大小,特别是小部件的宽度。

我的问题是我不知道如何获得小部件的大小。对于Android 4.1及更高版本,我使用的是onAppWidgetOptionsChanged()。但是,我的应用程序支持4.0及更高版本。因此对于4.1以下的Android版本,我无法正确调整布局大小,因此无法生成正确的位图。

有没有办法做到这一点?或者我现在看到的是更优雅/正确的方法吗?

我在4.0设备上看到了许多小部件,比如Gmail小部件。他们如何能够如此精美地绘制他们的小部件?他们是使用自定义字体还是只使用没有字体的标准文本视图?

1 个答案:

答案 0 :(得分:1)

不确定这是否有帮助,但...... http://www.vogella.com/tutorials/AndroidWidgets/article.html#overview_size

“2.3。小工具大小 在Android 3.1之前,小部件总是在主屏幕上占用固定数量的单元格。单元格通常用于显示一个应用程序的图标。作为计算规则,您应该使用以下公式定义窗口小部件的大小:((列数/行数)* 74) - 2.这些是设备无关的像素,-2用于避免舍入错误。

从Android 3.1开始,小部件的大小可以灵活,例如,用户可以使其更大或更小。要为小部件启用此功能,您可以在小部件的XML配置文件中使用android:resizeMode =“horizo​​ntal | vertical”属性。“