एंड्रॉइड में LinearLayout में एक टेक्स्ट व्यू कैसे जोड़ें


128

मैं TextViewsकोड में अपने xml परिभाषित लेआउट को जोड़ने की कोशिश कर रहा हूं । मेरे पास एक एक्सएमएल-शीट है, जहां बहुत सारे Viewsपरिभाषित हैं। लेकिन मुझे कोड में कुछ विचार जोड़ना है, इसलिए LinearLayoutxml- शीट में एक बनाएं :

<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>

और इस लेआउट में, मुझे अपना जोड़ना पसंद है TextView:

    View linearLayout =  findViewById(R.id.info);
    //LinearLayout layout = (LinearLayout) findViewById(R.id.info);


    TextView valueTV = new TextView(this);
    valueTV.setText("hallo hallo");
    valueTV.setId(5);
    valueTV.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));

    ((LinearLayout) linearLayout).addView(valueTV);

लेकिन मुझे केवल निम्न त्रुटि संदेश मिलता है:

: java.lang.ClassCastException: android.widget.TextView

मैं यह कैसे कर सकता हूं?

मदद के लिये शुक्रिया। मार्टिन


वह अपवाद किस पंक्ति के लिए है? यह LinearLayout कलाकारों से होना चाहिए, क्या आप सुनिश्चित हैं कि रैखिक रैखिक चर LinearLayout है और TextView नहीं है? इसके अलावा, आपको आईडी को निर्दिष्ट नहीं करना चाहिए क्योंकि आप गारंटी नहीं दे सकते कि यह अद्वितीय होगा।
रॉबी पॉन्ड

1
आप सही कह रहे हैं, linearLayout एक TextView है, लेकिन क्यों? मैंने इसे xml-file में LinearLayout के रूप में परिभाषित किया है ...
मार्टिन

1
सुनिश्चित करें कि आप वास्तव में ऊपर दिखाए गए xml पर काम कर रहे हैं। क्या setContentView(R.layout.your_xml_layout);वास्तव में सही xml लोड हो रहा है? क्या आपके पास अन्य xml लेआउट हैं जहां आप उपयोग करते हैं android:id="@+id/info"जो एक टेक्स्ट व्यू के रूप में होता है?
Rodja

क्या यह समस्या हल हो गई है? कृपया उत्तर के रूप में स्वीकार करें या एक पोस्ट करें।
तल्हा

जवाबों:


105

प्रयोग करके देखें

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.info);
...
linearLayout.addView(valueTV);

यह भी सुनिश्चित करें कि आपके द्वारा बनाए जा रहे लेआउट परिमाण LinearLayout.LayoutParams हैं ...


फिर से एक अपवाद है, क्योंकि findViewById एक TextView देता है। पर क्यों? मैं इसे LinearLayout id के साथ ला रहा हूं .... आपका क्या मतलब है: यह भी सुनिश्चित करें कि आप जो लेआउट पैरमेंट बना रहे हैं, वह LinearLayout.LayoutParams हैं ... ???
मार्टिन

वह कुछ भी क्यों बदलेगा? यह सब कुछ बाद में के बजाय जल्द ही डाली जाती है, जिसका प्रभाव समान होना चाहिए।
यस

70

अरे मैंने आपका कोड चेक कर लिया है, आपके कोड में कोई गंभीर त्रुटि नहीं है। यह पूरा कोड है:

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>

यह Stackoverflow.java है

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Stackoverflow extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        View linearLayout =  findViewById(R.id.info);
        //LinearLayout layout = (LinearLayout) findViewById(R.id.info);

        TextView valueTV = new TextView(this);
        valueTV.setText("hallo hallo");
        valueTV.setId(5);
        valueTV.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

        ((LinearLayout) linearLayout).addView(valueTV);
    }
}

इस कोड को कॉपी करें, और इसे चलाएं। यह पूरी तरह से त्रुटि मुक्त है। ख्याल रखना...


क्या होगा अगर मैं निम्नलिखित <TextView android:id="@+id/tvDInfo3" android:layout_width="0dp" android:layout_height="wrap_content" android:textStyle="bold" android:text="Release Date" android:gravity="center" android:padding="@dimen/dyk_text_pad" android:textColor="#000000" android:textSize="@dimen/info_text_size" android:layout_weight="1" />
पाठ

1
+1। यह उत्तर @ बेन की तुलना में बहुत बेहतर है क्योंकि इसमें लेआउटप्रैम का एक उदाहरण है और बाकी के गुणों को कैसे TextViewआरंभ किया गया है। इसे एक उत्तर के रूप में चिह्नित किया जाना चाहिए।
सुब्बी

3
नोट: २०१५ में FILL_PARENT को हटा दिया गया है, आपको इसके बजाय MATCH_PARENT का उपयोग करना चाहिए।
निकिता बोसिक

22

आप TextViewअपने रेखीय लेआउट को प्रोग्रामेटिक रूप से इस तरह जोड़ सकते हैं :

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mylayout);
TextView txt1 = new TextView(MyClass.this);
linearLayout.setBackgroundColor(Color.TRANSPARENT);
linearLayout.addView(txt1);

MyClass.this क्या है? मैं Android विकास के लिए नया हूँ; क्या मुझे "MyClass" के लिए अपने टुकड़े वर्ग का नाम बदलना चाहिए?
ड्रमस्ट जूथ

1
MyClass.this एक संदर्भ है और एक पाठ दृश्य एक संदर्भ में लेता है
Mihai Bratulescu

2
स्पष्टीकरण के लिए बस:, MyClass.thisज्यादातर मामलों में, के रूप में ही है this। आपको, हालांकि, वर्ग का नाम निर्दिष्ट करने की आवश्यकता है, यदि आप एक नेस्टेड वर्ग में हैं और "बाहरी" वर्ग के उदाहरण का उपयोग करना चाहते हैं, जो एंड्रॉइड में घटनाओं के लिए कॉलबैक को परिभाषित करते समय बहुत आम है।
ड्रिगोन्जेलो

मुझे लगता है कि कुछ Android डेवलपर्स को उस वर्ग का नाम रखने की आदत है जहां इसकी आवश्यकता है और इसे हर जगह डालना शुरू कर दिया है। इसके अलावा, MyClass.thisइसका एक उदाहरण है MyClassऔर यह केवल एक संदर्भ होगा यदि MyClass ने संदर्भ को लागू किया (उदाहरण के लिए गतिविधि)
drigoangelo

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

10

LinearLayout को गतिशील रूप से TextView जोड़ने के लिए आपको इसके समान कुछ का उपयोग करना चाहिए:

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 () का उपयोग फ्रैगमेंट्स के अंदर किया जाता है, आप संदर्भ या कुछ भी उसी तरह का उपयोग कर सकते हैं जो आपके अंदर हैं।


3

आपको लेआउट संसाधन के माध्यम से एक्सेस करने की आवश्यकता है, एक आईडी संसाधन नहीं जो अद्वितीय की गारंटी नहीं है। संसाधन संदर्भ R.layout.my_cool_layout की तरह दिखना चाहिए, जहां आपका ऊपर का XML लेआउट res / layout / my_cool_layout.xml में संग्रहीत है।


0
LinearLayout.LayoutParams layoutParams ;
layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

-2

यहां अपवाद है

((LinearLayout) linearLayout).addView(valueTV);

addViewविधि प्रकार के पैरामीटर में होती है View, नहीं TextView। इसलिए, valueTv ऑब्जेक्ट को किसी व्यू ऑब्जेक्ट में, स्पष्ट रूप से टाइप करें।

इसलिए, सही कोड होगा:

((LinearLayout) linearLayout).addView((TextView)valueTV);

क्या आपने इसका परीक्षण किया है?
mrres1

हाँ मेरे पास है। और यह पूरी तरह से काम करता है! या तुमने कोशिश की?
user3509153
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.