难以在点击时在现有文本视图旁边生成文本视图

时间:2015-05-26 18:07:10

标签: java android textview

我正在尝试创建一个Android应用程序,在该应用程序中单击一个按钮,然后在现有的文本视图旁边创建一个新的文本视图,其中一些预设文本具有相同的样式/大小。问题是,当创建新的文本视图时,文本看起来更小并且具有不同的样式(新文本是灰色,原始是黑色)。此外,新的文本视图似乎与原文不一致。我尝试了here建议的答案,并且略有改进,现在新文本已正确对齐但尺寸仍然小于原始文本。我的最终目标是拥有它,以便您可以继续单击按钮以将彼此相邻的更多文本视图添加到一起。有谁知道问题是什么?

相关代码:

public class MainActivity extends Activity {

    TextView textView;
    TextView textView2;
    LinearLayout container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        container = (LinearLayout) findViewById(R.id.linearLayout);
        textView = (TextView) findViewById(R.id.textView);
    }

    View.OnClickListener handler2 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            textView2 = new TextView(getApplicationContext());
            textView2.setLayoutParams(textView.getLayoutParams());
            container.addView(textView2);
        }        
    };
}

XML:

<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="49dp" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:id="@+id/linearLayout"
        android:layout_alignParentTop="false"
        android:layout_above="@+id/button">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="0"
            android:id="@+id/textView"
            android:textSize="50dp"
            android:layout_gravity="center_vertical" />

    </LinearLayout>
</RelativeLayout>

非常感谢。

3 个答案:

答案 0 :(得分:0)

试试这个:

public void onClick(View v) {
    textView2 = new TextView(getApplicationContext());
    textView2.setLayoutParams(textView.getLayoutParams());
    textView2.setTextSize(textView.getTextSize());
    textView2.setTextAppearance(this, android.R.style.TextAppearance_Large);
    container.addView(textView2);
}

答案 1 :(得分:0)

在OnClick方法中创建TextView时,您不应用在xml布局中执行的任何属性。新的TextView将具有textAppearance和textSize的默认值,这就是它看起来不同的原因。

答案 2 :(得分:0)

一个好的做法是在xml中定义视图样式,正是出于这个原因 - 它允许您在不同的地方重用它们。所以我在res/values/style.xml中为TextView定义了样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="textViewStyle" parent="@android:style/TextAppearance.Large">
    <item name="android:textSize">50dp</item>
</style>

</resources>

然后您可以将xml中的T​​extView更改为

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:style="@style/textViewStyle"
        android:text="0"
        android:id="@+id/textView"
        android:layout_gravity="center_vertical" />

当您以编程方式添加TextView时,可以使用

textView.setTextAppearance(context, R.style.textViewStyle);

这样你就不需要抓住旧的TextView了。你将以正确的Android方式做到这一点!