TextView android:引力设置为center_horizo​​ntal在绘制到位图时无法正常工作

时间:2014-02-02 11:10:14

标签: android android-layout bitmap textview gravity

重要: 我想将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并不重要,它仅用于显示位图。

0 个答案:

没有答案