重要: 我想将View A的内容绘制到位图,而View A的一部分是TextView,文本必须水平居中。视图A不显示也不属于另一个视图。
问题: 如何将TextView绘制到位图????
时告诉TextView正确显示文本我的基本布局(base_layout.xml):
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false" >
<TextView
android:id="@+id/dateTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="5dp"
android:gravity="center"
android:padding="3dp"
android:textStyle="bold" />
<TextView
android:id="@+id/shiftsListTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:singleLine="false"
android:maxLines="2"
android:padding="3dp" />
</LinearLayout>
我的TestActivity.java活动,我用它来测试:
public class TestActivity extends Activity {
private LinearLayout mainHolderLL;
@Override
protected int getLayoutXml() {
return R.layout.activity_test;
}
@Override
protected final void onCreate(Bundle savedInstanceState) {
mainHolderLL = (LinearLayout) findViewById(R.id.mainHolderLL);
View baseLayoutView = View.inflate(context, R.layout.base_layout, null);
dateTV.setText("Feb 2014");
shiftsListTV.setText("shift1, shift2");
int width = 500;
int height = 500;
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
baseLayoutView.measure(widthMeasureSpec, heightMeasureSpec);
baseLayoutView.layout(0, 0, baseLayoutView.getMeasuredWidth(), baseLayoutView.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(baseLayoutView.getMeasuredWidth(), baseLayoutView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
baseLayoutView.draw(canvas);
ImageView appwidget_image_view = (ImageView) findViewById(R.id.appwidget_image_view);
appwidget_image_view.setImageBitmap(bitmap);
}
}
activity_test.xml:
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/mainHolderLL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/common_padding_normal" >
<ImageView
android:id="@+id/appwidget_image_view"
android:layout_width="294dp"
android:layout_height="294dp"
android:background="@android:color/black"
android:cropToPadding="false"
android:padding="@dimen/widget_margin"
android:scaleType="fitXY"
tools:ignore="ContentDescription" />
</LinearLayout>
</ScrollView>
</HorizontalScrollView>
如果位图显示在ImageView内部,则dateTV TextView内的文本不会水平居中并且看起来像碎片(在Android 4.3上但在Android 2.3.3上没有显示任何内容),但shiftListTV中的文本正确显示。
如果我从dateTv TextView中删除android:gravity
属性,则dateTV中的文本会正确显示但不会居中。我需要以文字为中心。
编辑:
经过一番研究后,我发现TextView在重力标签方面存在问题。
imageview并不重要,它仅用于显示位图。