প্রোগ্রাম-লেআউট_গ্রাভিটি কীভাবে সেট করবেন?


333

আমার প্রশ্নটি সহজ,

কীভাবে আমার বোতামের লেআউট_গ্র্যাভিটি প্রোগ্রামেটিকভাবে সেট করবেন?

আমি এটি ইন্টারনেটে খুঁজে পেয়েছি, তবে এটি আমাকে একটি নলপয়েন্টার ব্যতিক্রম ছোঁড়ে:

 Button MyButton = new Button(this);

    LinearLayout.LayoutParams  lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
    lllp.gravity=Gravity.RIGHT;
    MyButton.setLayoutParams(lllp); 


    MyLinearLayout.addView(MyButton);

কোন সমাধান?


আমি বিশ্বাস করি যে লেআউটপ্যারামগুলি শূন্য নয় এমনটি হওয়ার আগে আপনার ভিউটির পিতামাতার সাথে যোগ করা দরকার।
ধনী মোরে

উত্তর:


544

জাভা

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
params.gravity = Gravity.TOP;

button.setLayoutParams(params);

Kotlin

val params = LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT,
    LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
    weight = 1.0f
    gravity = Gravity.TOP
}

মাধ্যাকর্ষণ মানগুলির জন্য এবং মাধ্যাকর্ষণ পরীক্ষা কীভাবে সেট করতে হয় মাধ্যাকর্ষণ

মূলত, আপনার LayoutParamsপিতামাতার উপর নির্ভর করে আপনার চয়ন করা উচিত । এটা হতে পারে RelativeLayout, LinearLayoutইত্যাদি ...


1
কিছু কারণে প্যারাম.গ্রাভিটি = 80 (এটি ডকস দ্বারা বটম হওয়া উচিত) কেবল কাজ করছে না। আমি ভিউ এবং পাঠ্যের নীচে কিছুটা জায়গা পেয়েছি। এটি এতটা
নীচু

51
ডকুমেন্টেশন থেকে ধ্রুবক মান নেওয়া সহজভাবে ভুল, দয়া করে গ্র্যাভিটি ব্যবহার করুন T টপ
ম্যারাগিউস

35
এটি "মাধ্যাকর্ষণ" এবং তিনি "লেআউট_গ্রাভিটি" চেয়েছিলেন ??
এম উসমান খান

10
@ উসমান না, এটি প্রায় layout_gravity(এটি LayoutParams.gravity)। gravityহবেbutton.setGravity()
Floern

8
মাধ্যাকর্ষণ এবং লেআউট_গ্রাভিটি সম্পর্কে এখানে অনেক ভুল তথ্য রয়েছে O অনেক setGravity()পিপিএল মনে করেন এটি লেআউট_গ্রাভিটি, তবে এটি ভুল। আমি এই অনুমোদন করতে পারি যে এই উত্তরটি সঠিকভাবে প্রোগ্রাম_আছেড_গ্রাভিটি সেট করার জন্য সঠিক।
বেভোর vor

55

আমি পুরানো থ্রেডগুলিকে পুনরুত্থিত করতে ঘৃণা করব তবে এটি এমন একটি সমস্যা যার সঠিক উত্তর দেওয়া হয়নি এবং তবুও আমি নিজেই এই সমস্যায় পড়েছি।

এখানে দীর্ঘক্ষণ, যদি আপনি কেবলমাত্র উত্তরের প্রতি আগ্রহী হন তবে দয়া করে কোডটিতে সমস্ত ভাবে স্ক্রোল করুন:

অ্যান্ড্রয়েড: মাধ্যাকর্ষণ এবং অ্যান্ড্রয়েড: লেআউট_গ্রাভিটি আলাদাভাবে কাজ করে। এখানে আমি নিবন্ধটি পড়লাম যা আমাকে সাহায্য করেছিল।

নিবন্ধের সংক্ষিপ্তসার: উচ্চতা / প্রস্থ নির্ধারিত হওয়ার পরে মাধ্যাকর্ষণ দৃশ্যকে প্রভাবিত করে। সুতরাং মাধ্যাকর্ষণ কেন্দ্র FILL_PARENT (এটিকে অটো মার্জিন হিসাবে ভাবেন) সম্পন্ন এমন কোনও দৃশ্যকে প্রভাবিত করবে না। লেআউট_গ্র্যাভিটি সেন্টার ফিল ফিল্টার (এটিকে অটো প্যাড হিসাবে ভাবেন) এমন দৃশ্যকে প্রভাবিত করবে।

মূলত, অ্যান্ড্রয়েড: লেআউট_গ্রাভিটি প্রোগ্রামিয়ালি অ্যাক্সেস করতে পারবেন না, কেবল অ্যান্ড্রয়েড: মাধ্যাকর্ষণ। ওপির ক্ষেত্রে এবং আমার ক্ষেত্রে, গৃহীত উত্তর বোতামটি উল্লম্বভাবে কেন্দ্র করে না।

কার্তির উত্তরটির উন্নতি করতে:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);

লিংক থেকেLinearLayout.LayoutParams

অ্যান্ড্রয়েড: লেআউট_গ্র্যাভিটি দেখায় "সম্পর্কিত কোনও পদ্ধতি নেই" যার অর্থ প্রোগ্রামক্রমে অ্যাক্সেস হতে পারে না। যেখানে মাধ্যাকর্ষণ ক্লাসের একটি ক্ষেত্র।


লিনিয়ারলাউট পিতামাতার অভিমুখের ভিত্তিতে সেই মাধ্যাকর্ষণ অটো-মার্জিনগুলিতে (আরও ভাল শর্তের অভাবে) যুক্ত করা to সরবরাহ করা নিবন্ধ লিঙ্ক সাহায্য করবে।
উকনিট রাত

21
MyButton.setGravity(Gravity.RIGHT);

লেআউট_গ্রাভিটির জন্য "কারথি" দ্বারা বর্ণিত উত্তরটি ব্যবহার করুন। এই পদ্ধতিটি শিশুদেরকে ভিউয়ের ভিতরে রাখার জন্য মাধ্যাকর্ষণ সেট করে।


37
এটি কেবল মাধ্যাকর্ষণ, লেআউট_গ্রাভিটি নয়।
আদম ভারেগেই

ঠিক আছে, তাহলে আমাকে বলুন যে লেআউট_গ্রাভিটি সেটগ্রাভিটির সমান, তবে আমি মাধ্যাকর্ষণটি কীভাবে সেট করব?
আদম ভারহেগি


5
একটি বিশাল ডকুমেন্ট পোস্ট করা সমাধানের সমাধান নয়, দুঃখিত
আদম ভারহেগি

লিঙ্কে সেটগ্রাভিটি পদ্ধতিটি দেখুন .., কোনওভাবে সঠিক পদ্ধতিতে পুনর্নির্দেশ কাজ করছে না ..
যশবন্ত কুমার

17

গ্রিডলআউটটিতে প্রোগ্রামক্রমে লেআউট_গ্রাভিটি বাটনগুলিতে সেট করার ক্ষেত্রে আমার একই সমস্যা ছিল।

কৌশলটি ছিল বোতামের বিন্যাসে মাধ্যাকর্ষণ সেট করা প্যারামস বাটনটি পিতামাতার (গ্রিডলআউট) যুক্ত করার পরে , অন্যথায় মাধ্যাকর্ষণ উপেক্ষা করা হবে

grid.addView(button)
((GridLayout.LayoutParams)button.getLayoutParams()).setGravity(int)

পুরো গ্রিডলআউটটির জন্য আমি কীভাবে বিন্যাস_ গ্রেভিটি পরিবর্তন করব?
ইকবাল

15

আপনি যদি layou_gravityকোনও বিদ্যমান দৃশ্যের পরিবর্তন করতে চান তবে এটি করুন:

((FrameLayout.LayoutParams) view.getLayoutParams()).gravity = Gravity.BOTTOM;

LayoutParamsআপনার ভিউটিতে যে লেআউট টাইপ রয়েছে তার ভিত্তিতে ডানটি ব্যবহার করতে ভুলবেন না Remember প্রাক্তন:

LinearLayout.LayoutParams


9

এই প্রশ্নটি পুরানো তবে আমি ঠিক একই সমস্যাটি পেয়েছিলাম এবং এটি এর মতো সমাধান করেছি

LayoutParams lay = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)
lay.gravity = Gravity.CENTER;

@ মুজিকান্ত .. ঠিক আছে .. আমি প্রথমে লক্ষ্য করিনি .. তবে এখন এটি আমার কাছে পরিষ্কার হয়ে গেছে .. ধন্যবাদ
নোমান

এটি কেবল প্রথমে কোন ধরণের লেআউট নির্দিষ্ট করে কাজ করে? RelativeLayout.LayoutParams এর মতো ... কেবল লেআউটপ্যারামের পরিবর্তে
ryvianstyron

RelativeLayout.LayoutParams ভিউটির মাধ্যাকর্ষণ নির্ধারণ করতে অন্যান্য পতাকা ব্যবহার করে (রাইটওফ, সেন্টারআইন্টার্নেন্ট, সেন্টার ভার্টিকাল)। এই কার্যসংক্রান্ত LinearLayouts ছোটদের জন্য
ননী

6

আকার পরিবর্তন না করে ফ্রেমলআউটে একাধিক মাধ্যাকর্ষণ সেট করে কোটলিন:

     // assign more than one gravity,Using the operator "or"
    var gravity = Gravity.RIGHT or Gravity.CENTER_VERTICAL
     // update gravity
    (pagerContainer.layoutParams as FrameLayout.LayoutParams).gravity = gravity
     // refresh layout
     pagerContainer.requestLayout()

এটি আমার সময় বাঁচায় ... THX
বার্টকিং

ধন্যবাদ ভাই! এটি আমার সময় 2 রক্ষা ...
YH_WU

4

আমি এর মতো সামিটিং ব্যবহার করি: (জ্যামারিন এবং সি # কোড)

  LinearLayout linLayout= new LinearLayout(this); 
    linLayout.SetGravity(GravityFlags.Center);

    TextView txtView= new TextView(this);  
     linLayout.AddView(txtView); 

সেটগ্রাভিটি আমার পাঠ্যদর্শনটিকে বিন্যাসের কেন্দ্রে রাখে। সুতরাং সেটগ্রাভিটি লেআউটের সম্পত্তি লেআউট সামগ্রীর উল্লেখ করে


4

আপনি যদি কোনও ভিউয়ের জন্য মাধ্যাকর্ষণ সেট করতে চান তবে নিম্নলিখিতটি ব্যবহার করুন

Button b=new Button(Context);
b.setGravity(Gravity.CENTER);

বাটনের জন্য লেআউট_গ্রাভিটি সেট করার জন্য লেআউটপ্রেমগুলির জন্য গ্র্যাভিটি ক্ষেত্রটি ব্যবহার করুন

LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER;

এই আশা চেষ্টা করুন এই ক্লিয়ার করে ধন্যবাদ


3

বাকি উত্তরগুলি সঠিক, আমি আরও ব্যাখ্যা যুক্ত করতে চাই। লেআউট_গ্রাভিটি প্যারেন্ট ভিউতে ভিউটি কীভাবে রাখবেন সে সম্পর্কে।

পদ্ধতি প্যারেন্টভিউ.অ্যাডভিউ () ** কল করার পরে আপনাকে অবশ্যই মাধ্যাকর্ষণ সেট করতে হবে। আমরা কোডটি দেখতে পাচ্ছি:

public void setLayoutParams(ViewGroup.LayoutParams params) {
    if (params == null) {
        throw new NullPointerException("Layout parameters cannot be null");
    }
    mLayoutParams = params;
    resolveLayoutParams();
    if (mParent instanceof ViewGroup) {
        ((ViewGroup) mParent).onSetLayoutParams(this, params);
    }
    requestLayout();
}

নাল পয়েন্টারের সমস্যা হ'ল কারণ এটি getLayoutParams () এর আগে অ্যাডভিউ কল করে না।

টীকাটি ইতিমধ্যে বলা হয়েছিল "যদি এই ভিউটি পিতামাতার ভিউগ্রুপ বা {@ লিঙ্ক # সেটলয়আউটপ্যারামস (অ্যান্ড্রয়েড.ভিউ.ভিউগ্রুপ.লাইআউটপ্যারামস) এর সাথে সংযুক্ত না থাকে তবে এই পদ্ধতিটি বাতিল হতে পারে successfully ভিউগ্রুপ, এই পদ্ধতিটি অবশ্যই বাতিল করা উচিত নয়। "


এই বিটটি আমাকেও ... অ্যাডভিউ () বলার পরে আপনাকে মাধ্যাকর্ষণ নির্ধারণ করতে হবে তা স্পষ্ট নয়। আপনি ভাবেন যে আপনি নতুন দৃশ্যে সবকিছু সেট আপ করবেন এবং তারপরে এটি যুক্ত করুন যাতে এটি
অপ্রয়োজনীয় :

3

আপনি যদি পিতামাতার কেন্দ্রে কোনও মতামত রাখতে চান তবে আপনি নিম্নলিখিত কোডগুলি দিয়ে করতে পারেন ..

public class myLayout extends LinearLayout {

    public myLayout(Context context) {
      super(context);

      RelativeLayout vi = (RelativeLayout) ((LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.activity_main, null);
      LinearLayout.LayoutParams cc = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
      cc.gravity = Gravity.CENTER;
      this.setGravity(Gravity.CENTER);
      this.addView(vi);
  }
}

এই কোড বিভাগটি লিনিয়ারলআউটকে প্রথম দর্শনের উপাদানগুলি পিতামাতার কেন্দ্রে রাখে। সুতরাং, আমরা সিস্টেমটি প্রস্থে বিন্যাসের জন্য প্রাথমিক প্রস্থ এবং উচ্চটিকে বিবেচনা করি না। আমি কোড বিভাগটি ভালভাবে করি।


i - italic))))
আর্টেম

2

RelativeLayout এ, এই কোডটি ব্যবহার করে দেখুন, এটি আমার পক্ষে কাজ করে: yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);


2

নিখুঁতভাবে কাজ !!! উপরের উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করে না। এক্সএমএল ফাইলের মধ্যে মাধ্যাকর্ষণ সেটিং এবং লেআউট_গ্রাভা নির্ধারণ আলাদা is নীচের কোডটি দেখুন

// here messageLL is the linear layout in the xml file
// Before adding any view just remove all views
   messageLL.removeAllViews();
// FrameLayout is the parent for LinearLayout
FrameLayout.LayoutParams params = new 
   FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
   params.gravity = Gravity.CENTER|Gravity.CENTER_VERTICAL;
   messageLL.setLayoutParams(params);
   messageText.setVisibility(View.GONE);
   messageNoText.setVisibility(View.VISIBLE);
   messageLL.addView(messageNoText);

এছাড়াও এটি পরীক্ষা করে দেখুন , যেখানে আপনি মাধ্যাকর্ষণ এবং লেআউট_গ্রাভিটি সম্পর্কে স্পষ্ট ব্যাখ্যা পেতে পারেন।


1

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

সেট layout_gravityprogrammtically

// gravity types : Gravity.BOTTOM, Gravity.START etc.
// view : can be any view example : button, textview, linearlayout, image etc.

// for single view
   public static void setLayoutGravity(int gravity, View view){
     ((LinearLayout.LayoutParams) view.getLayoutParams()).gravity = gravity;
    }


// for mulitple views
  public static void setLayoutGravity(int gravity, View ...view){
        for(View item : view)
            ((LinearLayout.LayoutParams) item.getLayoutParams()).gravity = gravity;
    }

0

লিনিআরআলআউট.লায়আউটপ্যারামস থেকে রিলেটিভলআউট.লায়আউটপ্যারামে স্যুইচ করেছি অবশেষে যে ফলাফলটি আমি তৈরি করেছি তার একটি কাস্টম সার্কেল ভিউয়ের জন্য পছন্দ করেছিলাম get

তবে অভিকর্ষের পরিবর্তে আপনি অ্যাডরুল ব্যবহার করুন

RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams (সার্কিট হাইট, সার্কেল হাইট);

    mCircleParams.addRule(RelativeLayout.CENTER_IN_PARENT);


0
 int width=getResources().getDisplayMetrics().widthPixels; 
 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
                    (width, width);

            params.gravity = Gravity.CENTER;

           iv_main_text = new HTextView(getContext());
            iv_main_text.setLayoutParams(params);
            iv_main_text.setBackgroundColor(Color.BLUE);
            iv_main_text.setTextSize(60);
            iv_main_text.setGravity(Gravity.CENTER);
            iv_main_text.setTextColor(Color.BLACK);

-1
FloatingActionButton sendFab = new FloatingActionButton(this);
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(32, 32, 32, 32);
    layoutParams.gravity = Gravity.END|Gravity.BOTTOM;
    sendFab.setLayoutParams(layoutParams);
    sendFab.setImageResource(android.R.drawable.ic_menu_send);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.