লিনিয়ারআলআউট শিশুদের মধ্যে কীভাবে স্থান তৈরি করবেন?


160

আমি ক্রমিকভাবে লম্বালম্বি লিনিয়ারলআউটটিতে কাস্টম ভিউগুলি যুক্ত করছি এবং আমি দেখতে চাই যে সেখানে দর্শনের মধ্যে কিছুটা স্থান রয়েছে। আমি আমার কাস্টমভিউ কনস্ট্রাক্টরে সেটপ্যাডিং (0, 1, 0, 1) যুক্ত করার চেষ্টা করেছি, তবে এর কোনও প্রভাব আছে বলে মনে হয় না। কোন পরামর্শ?

* এটি চিহ্নিত করা হয়েছিল যে আমার মার্জিন ব্যবহার করা উচিত। যেহেতু আমি গতিশীলভাবে ভিউগুলি যুক্ত করছি, তাই কোড থেকে মার্জিনগুলি সেট করতে হবে (এক্সএমএল নয়)। আমি বিশ্বাস করি এটি করার উপায়টি নীচে, তবে এটি কাজ করছে না।

public class MyView extends View
{
    public MyView (Context context)
    {
        super(context);

        MarginLayoutParams params = new MarginLayoutParams(LayoutParams.WRAP_CONTENT,  LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 10, 0, 10);
        setLayoutParams(params);

* সম্পাদনা করুন। লিনিয়ার লেআউটে (নীচের মত) ভিউগুলি যুক্ত করার সময় আমি প্যারামিটার হিসাবে মার্জিনআলআউটপ্যারামগুলি ব্যবহার করার চেষ্টাও করেছি। এটিও কার্যকর হয়নি:

MarginLayoutParams params = new MarginLayoutParams(linearLayout.getLayoutParams());
linearLayout.setMargins(0, 10, 0, 10);
linearLayout.addView(view, params);

আপনি যদি এক্সএমএল ফাইল যুক্ত করেছেন যা আপনি ভিউগুলি যুক্ত করতে চান তবে এটি সহায়তা করতে পারে।
ডেনিস শীতকাল

2
এটি সম্পর্কে একটি দুর্দান্ত ব্লগ পোস্ট এখানে রয়েছে: অ্যান্ড্রয়েডে গ্রিড স্পেসিং অ্যান্ড্রয়েডে স্যারিল মোটিয়ের দ্বারা
রিচার্ড লে

উত্তর:


131

আপনি android:layout_margin<Side>বাচ্চাদের উপর করা উচিত । প্যাডিং অভ্যন্তরীণ।


আপনি এক্সএমএলে দৃশ্যটি পছন্দসই মার্জিনের সাথে সংজ্ঞায়িত করতে পারেন এবং জাভা কোডেও সামগ্রীটি প্রয়োগ করে পদ্ধতিগতভাবে পূর্বনির্ধারিত মতামত যুক্ত করতে পারেন।
মাইক ইয়কি

আপনি এর দ্বারা কী বোঝাতে চেয়েছেন তা আমি সত্যই পরিষ্কার করছি না। আমি এক্সএমএল মধ্যে কাস্টমভিউ সংজ্ঞায়িত করা উচিত? তবে আমার গতিশীল কাস্টম ভিউগুলির একটি স্বেচ্ছাসেবী সংখ্যা তৈরি করতে হবে যা আমি তার পরে আমার লিনিয়ারলআউটটিতে যুক্ত করব।
abd

2
মার্জিন লেআউটপ্যারাম না হয়ে কেবল লেআউটপ্যারাম ব্যবহার করার চেষ্টা করুন।
টমাস

1
লিনিয়ারআলআউট.লায়আউটপ্যারামগুলিতে আমি কোন বৈশিষ্ট্যটি সেট করব? এই শ্রেণীর "মার্জিন" বা "প্যাডিং" বা এরকম কিছু আছে বলে মনে হচ্ছে না?
ab11

@ থমাস "প্যাডিং অভ্যন্তরীণ" বলতে আপনার অর্থ কী? আমি কি প্রতিটি উপাদানগুলিতে মার্জিন প্রয়োগ করব, যা আমি এড়াতে চেষ্টা করছি যাতে নকল কোডগুলি হ্রাস করতে হবে (যেমন আমার সন্তানের উপাদানগুলির মধ্যে আমার সমান ব্যবধান রয়েছে)
ওমগনেশ

188

এপিআই> = 11 সমাধান:

প্যাডিংকে ডিভাইডারে একীভূত করতে পারেন। আপনি যদি কোনওটিই ব্যবহার না করে থাকেন তবে কেবল একটি লম্বা ফাঁকা অঙ্কনযোগ্য তৈরি করুন এবং এটিকে LinearLayout'ডিভাইডার' হিসাবে সেট করুন :

    <LinearLayout
            android:showDividers="middle"
            android:divider="@drawable/empty_tall_divider"
...>...</LinearLayout>

empty_tall_divider.xml:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size
            android:height="40dp"
            android:width="0dp"/>
</shape>

আপনি এটিকে এপিআই <11 এ ব্যবহার করতে পারেন, যদি আপনি লিনিয়ারলাউটকম্প্যাট ব্যবহার করেন: বিকাশকারী.অ্যান্ড্রয়েড.
android/

5
আপনি যদি আকারটি বর্গক্ষেত্রের মতো করে তৈরি করেন তবে প্রস্থযুক্ত একটি নতুন তৈরি করার প্রয়োজন ছাড়াই আপনি এটি উল্লম্ব এবং অনুভূমিক লিনিয়ারলআউটগুলিতে ব্যবহার করতে পারেন।
ওয়ারেনফেইথ

2
এটি সম্পর্কে একটি দুর্দান্ত ব্লগ পোস্ট এখানে রয়েছে: অ্যান্ড্রয়েডে গ্রিড ব্যবধান সিরিল মোটিয়ার দ্বারা
রিচার্ড লে

1
আপনার মতামতের একটি সেট থাকে এবং সেগুলির মধ্যে কিছু ঘুরিয়ে দেওয়া যদি এটি আরও ভাল GONE। নির্দিষ্ট করে android:showDividers="middle"আপনি কেবলমাত্র যেখানে আপনার প্রয়োজন সেখানে স্থান পাবেন।
দারিয়াসল

@ ড্যারিয়াসএল আমি d.android.com এ এই শোডিভিয়ারদের বৈশিষ্ট্যটি খুঁজে পাই না, আপনি কি নিশ্চিত যে আমরা এটি ব্যবহার করতে পারি?
হেনরি

35

অ্যান্ড্রয়েড এখন দর্শনগুলির মধ্যে একটি স্পেস ভিউ যুক্ত করার পক্ষে সমর্থন করে । এটি 4.0 আইসিএস এর পরে উপলব্ধ।


12
দৃশ্যত অ্যান্ড্রয়েড-পরী আপনি শোনার এবং এপিআই 14 :) (একটি "স্থান" দৃশ্য নির্মিত developer.android.com/reference/android/widget/Space.html )
shaylh

হাঃ হাঃ হাঃ! এটি শুধুমাত্র একটি ব্যাপার ছিল।
কাজ করেছে

8
তবে আপনাকে প্রতি দর্শনীয় স্থানের প্রয়োজন, যা সমস্ত দর্শনগুলির জন্য ফাঁক ঘোষণার মতো নয়।
লে গোনজালেজ

^ খুব সত্য। তবে আপনি যদি লিনিয়ারলআউট ব্যবহার করছেন তবে আপনি একটি অ্যাড ডিভাইডার করতে পারেন যা প্রতিটি শিশু দর্শনে প্রয়োগ করা হবে। এখানে দেখুন: developer.android.com/references/android/widget/…
কাজ করেছে

1
এটি কোনও উত্তর নয়।
স্টিলথ রাব্বি

24

নীচের নমুনাটি আপনার অগ্রগতিগতভাবে যা প্রয়োজন তা করে। আমি একটি স্থির আকার (140,398) ব্যবহার করেছি।

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(140, 398);
        layoutParams.setMargins(24, 0, 24, 0);
        layout.addView(button,layoutParams);

আমি লিনিয়ারলআউট.লায়আউটপ্যারামস লেআউটপ্যারামসের নীচের মতো আরও একটি অতিরিক্ত পদক্ষেপ নিয়ে এটি করছিলাম; নতুন লিনিয়ারলআউট.লায়আউটপ্যারামস (140, 398); লেআউটপ্যারাম.সেটমার্গিনস (24, 0, 24, 0); এবং তারপরে বাটন 1.setLayoutParams (লেআউটপ্যারামস); layout.addView (বোতাম, layoutParams); .. অ্যাডভিউ 2 টি যুক্তি নিতে পারে তা জানার জন্য ধন্যবাদ।
png

6

এপিআই লেভেল ১৪ যেহেতু আপনি কেবল একটি (স্বচ্ছ) বিভাজক আঁকতে সক্ষম করতে পারেন:

android:divider="@drawable/divider"
android:showDividers="middle"

এবং এটি আপনার জন্য বাকি পরিচালনা করবে!


1
আপনার কি প্রথমে একটি বিভাজক অঙ্কনযোগ্য নির্দিষ্ট করতে হবে বা আপনি এটিকে অন্য কিছু দিয়ে ব্যবহার করতে পারেন?
টিম কাইস্ট

8dpকোথা থেকে এলো?
ইউশা আলেয়ুব

1
@ টিমকিস্ট আপনি যা ভাবছেন তা ছাড়া আপনি এটি ব্যবহার করতে পারেন
teh.fonsi

এই উত্তরটি ভুল কারণ অ্যান্ড্রয়েড: ডিভাইডারপ্যাডিং লিনিয়ার লেআউট শিশুদের মধ্যে দূরত্বকে প্রভাবিত করে না। এটি ডিভাইডারের পাশগুলিতে প্যাডিংগুলি প্রয়োগ করে যা বাচ্চাদের মুখোমুখি হয় না (উদাহরণস্বরূপ একটি উল্লম্ব লিনিয়ারলআউটে একটি বিভাজকের উপর বাম এবং ডান প্যাডিং)। অ্যান্ড্রয়েড ডকুমেন্টেশন: ডেভেলপার.অ্যান্ড্রয়েড.
com

2
আপনি ঠিক বলেছেন সম্ভবত সর্বোত্তম উপায় হ'ল একটি বিভাজক অঙ্কনযোগ্য যা স্বচ্ছ use আমি সেই অনুযায়ী আমার উত্তর আপডেট করেছি।
teh.fonsi

4

LinearLayout.LayoutParamsপরিবর্তে ব্যবহার করুন MarginLayoutParamsএখানে ডকুমেন্টেশন।


লিনিয়ারআলআউট.লায়আউটপ্যারামগুলিতে আমি কোন বৈশিষ্ট্যটি সেট করব? এই শ্রেণীর "মার্জিন" বা "প্যাডিং" বা এরকম কিছু আছে বলে মনে হচ্ছে না?
ab11

LinearLayout.LayoutParamsপ্রসারিত হয় MarginLayoutParamsএবং এটি setMargins()আপনি উপরে যে পদ্ধতিটি ব্যবহার করছিলেন একইভাবে উত্তরাধিকার সূত্রে প্রাপ্ত ...
ক্রিস ফি

ওহহহ, ধন্যবাদ! আমি তাকিয়ে ছিলাম: android.view.ViewGroup.LayoutParams
ab11

3

আপনি ব্যবহার করেন তাহলে ActionBarSherlock , আপনি com.actionbarsherlock.internal.widget.IcsLinearLayout ব্যবহার করতে পারেন:

<com.actionbarsherlock.internal.widget.IcsLinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:divider="@drawable/list_view_divider"
        android:dividerPadding="2dp"
        android:showDividers="middle" >
...
</com.actionbarsherlock.internal.widget.IcsLinearLayout>

2

চাইল্ড ভিউয়ের লেআউটে প্যাডিং ব্যবহার করা।

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_margin="5dp"
          android:background="@drawable/backage_text"
          android:textColor="#999999"
           >

</TextView>

backage_text.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@color/white"/>
    <corners android:radius="2dp"/>
    <stroke
        android:width="1dp"
        android:color="#999999"/>
    <padding
        android:bottom="5dp"
        android:left="10dp"
        android:right="10dp"
        android:top="5dp" />
</shape>

0

আপনি LayoutParamsপিতামাতাদের পেতে পারেন LinearLayoutএবং পৃথক দর্শনগুলিতে এভাবে প্রয়োগ করতে পারেন:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(8,8,8,8);
  • সেট মার্জিনগুলি () পিক্সেলগুলিকে ডেটা টাইপ টাইপ হিসাবে গ্রহণ করবে সেদিকে খেয়াল রাখুন, সুতরাং মানগুলি যুক্ত করার আগে ডিপিতে রূপান্তর করুন
  • উপরের কোডটি উচ্চতা এবং প্রস্থকে মোড়ানো_ কনটেন্টে সেট করবে। আপনি এটি কাস্টমাইজ করতে পারেন।

0

এর মত ভিউ যুক্ত করার পরে স্পেস উইজেট যুক্ত করার চেষ্টা করুন :

layout.addView(view)
val space = Space(context)
space.minimumHeight = spaceInterval
layout.addView(space)

0

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

LinearLayout userFeedLinearLayout = (LinearLayout) findViewById(R.id.userFeedLinearLayout);
imageView.setImageBitmap(bitmap);
imageView.setPadding(0, 30, 0, 30);
userFeedLinearLayout.addView(imageView);

নীচের চিত্রটি দুটি প্যাডভিউ দেখায় যা প্যাডিংয়ের সাথে যুক্ত করা হয়েছে:

বাচ্চাদের উপর প্যাডিং


-1

যদি আপনার বিন্যাসে লেবেল থাকে বা পাঠ্যের জন্য কিছু ধারক থাকে। আপনি প্রতিটি পাঠ্যের শেষে যুক্ত করতে পারেন "\ n" একটি লাইন বিভক্ত করতে এবং উপাদানগুলির মধ্যে স্থান তৈরি করতে।
উদাহরণ:

video?.text="Video NR1: ${obj.Titulo} \n" 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.