Java 如何在Android中向LinearLayout添加文本视图
我正在尝试将Java 如何在Android中向LinearLayout添加文本视图,java,android,xml,textview,android-linearlayout,Java,Android,Xml,Textview,Android Linearlayout,我正在尝试将TextViews添加到代码中xml定义的布局中。 我有一个xml表,其中定义了许多视图。但是我必须在代码中添加一些视图,因此在xml工作表中创建一个LinearLayout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:id="@+id/info" android:layout_heigh
TextViews
添加到代码中xml定义的布局中。
我有一个xml表,其中定义了许多视图。但是我必须在代码中添加一些视图,因此在xml工作表中创建一个LinearLayout
:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:id="@+id/info"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
但我只收到以下错误消息:
: java.lang.ClassCastException: android.widget.TextView
我怎么做
谢谢你的帮助。
Martin尝试使用
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.info);
...
linearLayout.addView(valueTV);
还要确保您正在创建的布局参数是LinearLayout。LayoutParams…您需要通过布局资源访问布局,而不是通过不保证唯一的id资源。资源引用应该类似于R.layout.my_cool_layout,上面的XML布局存储在res/layout/my_cool_layout.XML中。嘿,我检查了你的代码,你的代码中没有严重错误。这是完整的代码:
main.xml:-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:id="@+id/info"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
复制此代码并运行它。它完全没有错误。
小心…您可以通过编程方式将文本视图添加到线性布局中,如下所示:
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout);
TextView txt1 = new TextView(MyClass.this);
linearLayout.setBackgroundColor(Color.TRANSPARENT);
linearLayout.addView(txt1);
这里是异常发生的地方
((LinearLayout) linearLayout).addView(valueTV);
addView
方法接受类型为View
的参数,而不是TextView
。因此,显式地将valueTv对象类型转换为视图对象
因此,更正后的代码为:
((LinearLayout) linearLayout).addView((TextView)valueTV);
对于(int j=0;j您应该使用类似的方法将TextView动态添加到LinearLayout:
LinearLayout linearLayout = getActivity().findViewById(R.id.infoLayout);
TextView valueTV = new TextView(context);
valueTV.setText("hallo hallo");
valueTV.setId(Integer.parseInt("5"));
valueTV.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.addView(valueTV);
getActivity()用于内部片段,您可以根据每个实例使用上下文或任何类似的内容。在Kotlin中,您可以添加如下文本视图
val textView = TextView(activity).apply {
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
setMargins(0, 20, 0, 0)
setPadding(10, 10, 0, 10)
}
text = "SOME TEXT"
setBackgroundColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimary))
setTextColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimaryDark))
textSize = 16.0f
typeface = Typeface.defaultFromStyle(Typeface.BOLD)
}
linearLayoutContainer.addView(textView)
该异常是针对哪一行的?它必须来自LinearLayout强制转换,您确定LinearLayout变量是LinearLayout而不是TextView吗?您也不应该指定Id,因为您不能保证它是唯一的。您是对的,LinearLayout是TextView,但为什么?我在xml文件中将其定义为LinearLayout…请确保e您确实在上面显示的xml上操作。是否setContentView(R.layout.your_xml_layout);
确实加载了正确的xml?您是否有其他使用android:id=“@+id/info”的xml布局
哪个恰好是TextView?这个问题解决了吗?请接受作为答案或发布一个。再次出现一个例外,因为findViewById返回一个TextView。但是为什么呢?我用LinearLayout id获取它…你的意思是什么:还要确保你正在创建的布局参数是LinearLayout.LayoutParams…??为什么是c更改任何东西?它所做的一切都是早晚转换的,这应该具有相同的效果。什么是MyClass。这是什么?我是Android开发的新手;我应该用我的片段类的名称替换“MyClass”吗?MyClass。这是一个上下文,文本视图接收上下文仅供澄清:MyClass。在大多数情况下,此
与此
相同。但是,如果您在嵌套类中并且希望访问“outer”的实例,则需要指定类的名称类,这在android中定义事件回调时非常常见。我猜一些android开发人员已经习惯于将类的名称放在需要的地方,并开始将其放在任何地方。此外,MyClass。这是MyClass
的一个实例,只有MyClass实现了上下文,它才会成为上下文(例如,扩展活动)如果我想要以下文本视图:
+1。这个答案比@Ben的要好得多,因为它包含一个LayoutParams示例,以及文本视图
的其余属性是如何初始化的。这应该标记为一个答案。你测试过这个吗?是的,我测试过了。它工作得很好!你试过了吗?必须ne,linear.addView(childLayout);,首先是线性布局
((LinearLayout) linearLayout).addView((TextView)valueTV);
for(int j=0;j<30;j++) {
LinearLayout childLayout = new LinearLayout(MainActivity.this);
LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
childLayout.setLayoutParams(linearParams);
TextView mType = new TextView(MainActivity.this);
TextView mValue = new TextView(MainActivity.this);
mType.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, 1f));
mValue.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, 1f));
mType.setTextSize(17);
mType.setPadding(5, 3, 0, 3);
mType.setTypeface(Typeface.DEFAULT_BOLD);
mType.setGravity(Gravity.LEFT | Gravity.CENTER);
mValue.setTextSize(16);
mValue.setPadding(5, 3, 0, 3);
mValue.setTypeface(null, Typeface.ITALIC);
mValue.setGravity(Gravity.LEFT | Gravity.CENTER);
mType.setText("111");
mValue.setText("111");
childLayout.addView(mValue, 0);
childLayout.addView(mType, 0);
linear.addView(childLayout);
}
LinearLayout linearLayout = getActivity().findViewById(R.id.infoLayout);
TextView valueTV = new TextView(context);
valueTV.setText("hallo hallo");
valueTV.setId(Integer.parseInt("5"));
valueTV.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.addView(valueTV);
val textView = TextView(activity).apply {
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
setMargins(0, 20, 0, 0)
setPadding(10, 10, 0, 10)
}
text = "SOME TEXT"
setBackgroundColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimary))
setTextColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimaryDark))
textSize = 16.0f
typeface = Typeface.defaultFromStyle(Typeface.BOLD)
}
linearLayoutContainer.addView(textView)