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

Difficulty generating a textview next to an existing textview on click

我正在尝试制作一个 android 应用程序,您可以在其中单击一个按钮,然后在现有文本视图的旁边创建一个新的文本视图,并在相同 style/size 中使用一些预设文本。问题是,当创建新的文本视图时,文本看起来更小并且样式不同(新文本为灰色,原始文本为黑色)。此外,新的 textview 看起来与原始文本视图没有对齐。我尝试了建议的答案 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>

非常感谢。

试试这个:

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);
}

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

一个好的做法是在 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 中的 TextView 更改为

<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 进行操作!