একটি টেক্সটভিউয়ের বিন্যাসের ওজন প্রোগ্রামক্রমে সেট করুন


214

আমি গতিশীলভাবে TableRowঅবজেক্ট তৈরি করতে এবং এগুলিতে যুক্ত করার চেষ্টা করছি TableLayoutTableRowবস্তু 2 আইটেম, একটি আছে TextViewএবং একটি CheckBoxTextViewআইটেম ধাক্কা 1 তাদের বিন্যাস ওজন সেট থাকতে হবে CheckBoxপর্যন্ত ডানদিকে আইটেম।

আমি কোনও TextViewআইটেমের লেআউট ওজনকে প্রোগ্রামগতভাবে কীভাবে সেট করব সে সম্পর্কে ডকুমেন্টেশন পাচ্ছি না ।

উত্তর:


355

আপনাকে TableLayout.LayoutParamsএরকম কিছু ব্যবহার করতে হবে :

TextView tv = new TextView(v.getContext());
tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));

শেষ প্যারামিটারটি ওজন।


15
আমি এর আগে এটি উল্লেখ করিনি, তাই আমি দুঃখিত। তবে আমি আমার প্রশ্ন জিজ্ঞাসা করার আগে এটি চেষ্টা করেছিলাম। এটি টেক্সটভিউটিকে বিন্যাস থেকে অদৃশ্য করে তোলে। তবে, একটি ইতিবাচক নোটে, আমি দেখতে পেলাম যে টেবিললআউটটির প্রসারিত_কলামগুলি সম্পত্তি 0 তে সেট করার ফলে আমি যে প্রভাবটি খুঁজছি তার কারণ (ডানদিকে টেক্সটভিউস, ডানদিকে চেকবক্স) causes সাহায্যের জন্য ধন্যবাদ.
ইউজিন

8
আপনি যদি কোনও এক্সএমএল লেআউটটি আমদানি করে থাকেন এবং আপনি আপনার লেআউটটি গতিশীলভাবে তৈরি না করে থাকেন তবে আপনি এটির মতো এটি ধরতে পারেন:TextView tv = (TextView) findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.1f));
এরিক লেসচিনস্কি

5
প্রোগ্রাম্যিকভাবে বিন্যাসের ওজন সেট করতে, TableRow.LayoutParamsপরিবর্তে ব্যবহার করা উচিত TableLayout.LayoutParams। @ দোর্জের উত্তর দেখুন।
হালিল

আমদানি android.widget.LinearLayout; আমদানি android.widget.TableLayout;
প্রকাশ

1
মনে রাখবেন যে বেশিরভাগ লোক 0 বা প্রথম বা দ্বিতীয় প্যারামিটার হিসাবে ব্যবহার করবে (অনুভূমিক বা উল্লম্ব যদি নির্ভর করে) এবং Wrap_CONTENT নয় যেহেতু তারা যা খুঁজছেন তা ওজন নির্ধারণ করতে হবে।
ফ্লোরিয়ানবি

97

উত্তরটি হ'ল আপনাকে টেবিলরো.লায়আউটপ্যারামগুলি ব্যবহার করতে হবে, লিনিয়ারলআউট.লায়আউটপ্যারাম বা অন্য কোনও লেআউটপ্যারাম ব্যবহার করবেন না।

TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);

বিভিন্ন লেআউটপ্যারামগুলি বিনিময়যোগ্য নয় এবং আপনি যদি ভুলটি ব্যবহার করেন তবে কিছুই হবে বলে মনে হয় না। পাঠ্য দেখার পিতামাতার একটি সারণী সারি, সুতরাং:

http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html


এই উত্তরটি আমাকে অনেক সাহায্য করেছে ... টেবিল লেআউট আমার পক্ষে কাজ করে নি
sham.y

ওহে মানুষ, তুমি আমাকে এত সময় বাঁচিয়েছ এটি নির্দিষ্ট করা হয় কোথায়? আপনার বিনিময় করতে পারবেন না এমন নথিতে আমি কিছুই পাইনিLayoutParams
অ্যাড্রিয়েন ক্যাডেট

TableRow.LayoutParamsআমার জন্যও কাজটি করেছেন
মেনেলাওস কোটসোল্লারিস

6
এই উত্তরের মূল অংশটি হল 0
লিওন

এটি আমার কাজের সময়কে হ্রাস করবে m আমি দীর্ঘদিন ধরে এটি অনুসন্ধান করছি ery খুব দুর্দান্ত সমাধান
SIVAKUMAR.J

38

পূর্বের উত্তরে ওজন একটি নতুন সামলআউটটাইপ.লায়আউটপ্যারামস অবজেক্টের কনস্ট্রাক্টরকে দেওয়া হয়। তবুও অনেক ক্ষেত্রে বিদ্যমান অবজেক্টগুলি ব্যবহার করা আরও সুবিধাজনক - এটি আমাদের আগ্রহী নয় এমন পরামিতিগুলি মোকাবেলা করতে এড়াতে সহায়তা করে।

একটি উদাহরণ:

// Get our View (TextView or anything) object:
View v = findViewById(R.id.our_view); 

// Get params:
LinearLayout.LayoutParams loparams = (LinearLayout.LayoutParams) v.getLayoutParams();

// Set only target params:
loparams.height = 0;
loparams.weight = 1;
v.setLayoutParams(loparams);

লোপ্যারামগুলি নুল হতে পারে তাই সেটলয়েটপ্যারামস ()
এএজিজি

@ এএজিজি, ব্যবহারিক পরিস্থিতিতে নয়। প্রস্থ এবং উচ্চতা সেট না থাকলে দৃশ্যটি স্ফীত হবে না। তবে আমি সম্মত - নাল সম্পর্কে সন্দেহ আছে কিনা তা পরীক্ষা করা ভাল অভ্যাস।
sberezin

16
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);

1f ওজন = 1 হিসাবে চিহ্নিত করা হয়; আপনি 2f বা 3f দিতে পারেন, দর্শন স্থানটিতে অ্যাকোডিংয়ে স্থানান্তরিত হবে


12

যেমন লেআউটে লেআউট প্যারাম সেট করুন

প্যারাম ভেরিয়েবল তৈরি করুন

 android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);

1 এফ ওজন পরিবর্তনশীল

আপনার উইজেট বা লেআউট পছন্দ করুন

 TextView text = (TextView) findViewById(R.id.text);
 text.setLayoutParams(params);

আপনি এই তথ্যটি কোথায় পাবেন যে 1f এর অর্থ ওজন পরিবর্তনশীল? আপনি একটি লিঙ্ক প্রদান করতে পারেন দয়া করে?
হাইওঞ্জ

@ হাইওঞ্জ কেবল নির্মাণকারীর উত্স পরীক্ষা করে দেখুন LinearLayout.LayoutParams। তৃতীয় প্যারামিটার ওজন। বা ডকুমেন্টেশন
মেনেটে

11
TextView text = new TextView(v.getContext());
text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                                                LayoutParams.WRAP_CONTENT, 1f));

(বা)

TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);

1f ওজন = 1 হিসাবে রেফার করা হয়; আপনার প্রয়োজন অনুসারে আপনি 2f বা 3f দিতে পারেন, দর্শন স্থানটিতে অ্যাকোডিংয়ে স্থানান্তরিত হবে। লিনিয়ার লেআউটে দর্শনের মধ্যে নির্দিষ্ট দূরত্ব তৈরি করার জন্য " লিনিয়ারলআউট " এর জন্য ওয়েটসাম ব্যবহার করুন ।

LinearLayout ll_Outer= (LinearLayout ) view.findViewById(R.id.linearview);
LinearLayout llInner = new LinearLayout(this);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
            llInner.Orientation = Orientation.Horizontal;
            llInner.WeightSum = 2;
            ll_Outer.AddView(llInner);


7

আপনি আলাদাভাবে ওজনও দিতে পারেন,

LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

 lp1.weight=1;

6

এটি আমার জন্য কাজ, এবং আমি আশা করি এটি আপনার পক্ষেও কার্যকর হবে

প্রথম প্যারেন্ট ভিউয়ের জন্য লেআউটপ্যারাম সেট করুন:

myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
                TableLayout.LayoutParams.FILL_PARENT));

তারপরে টেক্সটভিউ (শিশু) এর জন্য সেট করুন:

 TableLayout.LayoutParams textViewParam = new TableLayout.LayoutParams
     (TableLayout.LayoutParams.WRAP_CONTENT,
     TableLayout.LayoutParams.WRAP_CONTENT,1f);
     //-- set components margins
     textViewParam.setMargins(5, 0, 5,0);
     myTextView.setLayoutParams(textViewParam); 

1

এটি করার আরও একটি উপায় আছে। আপনার কেবলমাত্র একটি পরামিতি সেট করতে হবে, উদাহরণস্বরূপ 'উচ্চতা':

TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);

1

৪ ঘন্টা লড়াই করার পরে। অবশেষে, এই কোডটি আমার পক্ষে কাজ করেছিল।

3 টি কলাম সেখানে পরপর রয়েছে।

  TextView serialno = new TextView(UsersActivity.this);
  TextView userId = new TextView(UsersActivity.this);
  TextView name = new TextView(UsersActivity.this);

  serialno.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  userId.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
  name.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

-1

এর সাথে সাদৃশ্যপূর্ণ কিছু সমাধান করার ক্ষেত্রে আমার যথেষ্ট পরিমাণে অসুবিধা হয়েছিল: একটি টেবিলরোতে দুটি বোতাম রাখার চেষ্টা করা হয়েছে, যার প্রতিটিই পর্দার প্রস্থের অর্ধেক। যে কারণেই হোক না কেন, বাম বোতামটি সর্বদা প্রস্থের প্রায় 70% এবং ডান বোতামটি 30% হবে। টেবিল_লেআউট.সেট স্ট্রেচআলকলামগুলি (সত্য) কল করার কোনও প্রভাব নেই, বাটনের প্রস্থটি অর্ধেক স্ক্রিনে সেট করে না বা তাদের বিন্যাসের ওজন নির্ধারণ করে না।

সমাধান আমি TableRows, যা একটি LinearLayout পাখির ছিল সঙ্গে শেষ পর্যন্ত হয়নি একাউন্টে বোতাম 'প্রস্থের মান গ্রহণ করা।

    TableLayout layout = new TableLayout(this);
    TableRow top_row = new TableRow(this);
    left_button = styleButton();
    right_button = styleButton();
    LinearLayout toprow_layout = new LinearLayout (this);
    toprow_layout.setOrientation(LinearLayout.HORIZONTAL);
    toprow_layout.addView (left_button);
    toprow_layout.addView(right_button);
    toprow.addView(top_layout);
    layout.addView(top_row)

    private Button styleButton() {
            Button btn = new Button (this);
            android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();      
            btn.setWidth((int)(display.getWidth()/2));    // set width to half
            btn.setHeight(((int)display.getHeight()/6));  // set height to whatevs
            btn.setText("foo");
            return btn;
        }

1
আপনি কেবল ভবিষ্যতের জন্য জানেন, সমাধানটি হ'ল টেবিলরো, বাটন 1 এবং বাটন 2 সকলের কাছে সেট করা এবং এটি করার layout_width=fill_parentপরে, layout_weight=1বোতাম 1 এবং বোতাম 2 উভয়ের জন্য সেট করুন set ভরাট_পিতা এবং লেআউট_ ওয়েট = 1 সহ সমস্ত উপাদানকে মুদ্রাস্ফীতিের পরে সমান আকার দেওয়া হবে।
এডিথার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.