单击时难以在现有文本视图旁边生成文本视图
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 进行操作!
我正在尝试制作一个 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
:
<?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 进行操作!