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)