তালিকাভিউ এবং বোতামগুলির সাথে অ্যান্ড্রয়েড লেআউট


101

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

মৃত ইমেজশ্যাক লিঙ্কটি সরানো হয়েছে

দেখে মনে হচ্ছে এটি এত সহজ হওয়া উচিত তবে আমি যা চেষ্টা করেছি সে সবই ব্যর্থ হয়েছে। কোন সাহায্য?

আমার বর্তমান কোডটি এখানে:

    RelativeLayout container = new RelativeLayout(this);
    container.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

    //** Add LinearLayout with button(s)

    LinearLayout buttons = new LinearLayout(this);

    RelativeLayout.LayoutParams bottomNavParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    bottomNavParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    bottomNavParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    buttons.setLayoutParams(bottomNavParams);


    ImageButton newLayer = new ImageButton(this);
    newLayer.setImageResource(R.drawable.newlayer);
    newLayer.setLayoutParams(new LinearLayout.LayoutParams(45, LayoutParams.FILL_PARENT));
    buttons.addView(newLayer);

    container.addView(buttons);

    //** Add ListView

    layerview = new ListView(this);

    RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    listParams.addRule(RelativeLayout.ABOVE, buttons.getId());

    layerview.setLayoutParams(listParams);

    container.addView(layerview);

ভাল প্রশ্ন, অনেক দেব এর উপর এই আটকে যাচ্ছে।
কোডেডি

ধন্যবাদ, অ্যান্ড্রয়েডের ডিজাইনারটি আসলে বেশ মিষ্টি। সুতরাং, একটি বিন্যাস / ইউআই তৈরি করার সময় ডিজাইনার / এক্সএমএল ব্যবহার করার চেষ্টা করুন। বিশেষত এই দৃশ্যের জন্য যেহেতু এটি কেবলমাত্র বোতামগুলির একটি সেট এবং একটি তালিকাভিউ।
সাববি

উত্তর:


137

আমি মনে করি এটিই আপনি খুঁজছেন।

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

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:id="@+id/testbutton"
        android:text="@string/hello" android:layout_alignParentBottom="true" />

    <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:id="@+id/list"
        android:layout_alignParentTop="true" android:layout_above="@id/testbutton" />

</RelativeLayout>

আমি জাভাতে লেআউটটি লিখছি যদিও এটি আমি মূলত ব্যবহার করছি। তালিকাগুলি এখনও বোতামগুলির উপরে প্রসারিত।
ক্লিপটাইন

1
কেবলমাত্র আমি যা পরিবর্তন করছি তা হল আমি তালিকাভিউয়ের আশেপাশে একটি আপেক্ষিক লেআউট যুক্ত করছি কারণ আমি একটি তালিকাভিউতে অ্যাডরুল (RelativeLayout.ABOVE) কল করতে পারি না।
ক্লিপটাইন

2
এই কোডটি সূক্ষ্মভাবে কাজ করা উচিত। উপরের android:layout_above="@id/testbutton"রাখা হবে । ListViewButton
কমন্সওয়্যার

আমি যখন এটি ব্যবহার করি তখন আমি বোতামটির উপরে থামার জন্য তালিকাটি পাই এবং তারপরে অভ্যন্তরীণভাবে স্ক্রোলিং শুরু করি।
Lars

7
আপনি কল না addRule(RelativeLayout.ABOVE)একটি উপর RelativeLayout, নয়তো। আপনি এটি একটি কল RelativeLayout.LayoutParams। তারপরে ListViewআপনি এটি RelativeLayoutসরবরাহ করে RelativeLayout.LayoutParams। দীর্ঘমেয়াদী রক্ষণাবেক্ষণের জন্য দয়া করে এক্সএমএল-এ স্যুইচিং এবং এটি স্ফীত করে বিবেচনা করুন।
কমন্সওয়্যার

57

আমি যুগ যুগ ধরে একই সমস্যা ছিল।

তালিকাটি ভিউগুলি উপরে রাখার সমাধান, তবে তালিকাটি দীর্ঘ হওয়ার পরে এগুলি coveringেকে রাখা থেকে বিরত রাখতে হবে: তালিকাটি ভিউতে অ্যান্ড্রয়েড: লেআউট_ ওয়েট = "1.0" সেট করা। বোতামগুলিকে আনসেট না করে লেআউট_ওয়েট ছেড়ে দিন যাতে সেগুলি তাদের প্রাকৃতিক আকারে থেকে যায়, অন্যথায় বোতামগুলি মাপবে। এটি লিনিয়ারলআউটের সাথে কাজ করে।

অ্যান্ড্রয়েড অ্যাপিডেমোজে একটি উদাহরণ রয়েছে: অ্যাপিডেমোস / রেস / লেআউট / লিনিয়ার_লেআউট_9.xML


আমাকে আরও কয়েক ঘন্টা বাঁচান বোতামগুলি কেন উপস্থিত হয়নি তা বুঝতে পারি নি। :)
হিমশীতল

এটি কেন কাজ করে তা আমি পুরোপুরি বুঝতে পারি না তবে এটি কাজ করে :)
বেভার

20

আমি কেবল এই প্রশ্নের উত্তর খুঁজছিলাম এবং এটি প্রথম ফলাফলগুলির মধ্যে একটি। আমি মনে করি যেন বর্তমানে "সেরা উত্তর" হিসাবে নির্বাচিত উত্তর সহ সমস্ত উত্তরই জিজ্ঞাসিত সমস্যাটির দিকে নজর দিচ্ছে না। যে সমস্যাটি বলা হচ্ছে তা হ'ল দুটি উপাদানগুলির একটি ওভারল্যাপ রয়েছে Buttonএবং ListViewএটিতে তালিকাভিউ পুরো পর্দাটি নিয়েছে এবং বোতামটি দৃষ্টিভঙ্গিভাবে তালিকাভিউর (সামনের দিকে) অবরুদ্ধ দর্শন / অ্যাক্সেসের উপরে ভাসছে আইটেম মধ্যে ListView)

আমি এখানে এবং অন্যান্য ফোরামে যে উত্তরগুলি দেখেছি তার ভিত্তিতে অবশেষে আমি কীভাবে এটি সমাধান করব সে সম্পর্কে সিদ্ধান্তে পৌঁছেছি।

মূলত, আমার ছিল:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#FF394952">

  <ListView
    android:id="@+id/game_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">

    <Button
      android:id="@+id/new_game"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/new_game"
      android:textColor="#FFFFFFFF"
      android:background="@drawable/button_background" />
  </LinearLayout>

</RelativeLayout>

RelativeLayoutরুট নোড হিসাবে ব্যবহার নোট করুন ।

এটি চূড়ান্ত, কার্যকারী সংস্করণ যা বোতামটি ওভারল্যাপ করে না ListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#FF394952">

  <ListView
    android:id="@+id/game_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_weight="1.0" />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">

    <Button
      android:id="@+id/new_game"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/new_game"
      android:textColor="#FFFFFFFF"
      android:background="@drawable/button_background" />
  </LinearLayout>

</LinearLayout>

দুটি মাত্র পার্থক্য আছে। প্রথমত, আমি একটি ব্যবহার করে স্যুইচ করেছি LinearLayout। এটি পরবর্তী বিটটিতে সহায়তা করবে, যা android:layout_weightআমার সাথে যুক্ত হয়েছিলListView

আশা করি এটা কাজে লাগবে.


এটি সমাধান করে, তবে কে অনুমান করবে !? আপনি যখন android:layout_alignParentBottomকোনও LinearLayoutপিতামাতার ভিতরে দেবেন , তখন এডিটি "লিনিয়ারলাইআউটে অবৈধ লেআউটাম: লেআউট_লাইনপ্যারেন্টবটম" বলে!
আসভিন কুমার

8

সর্বোত্তম উপায় হ'ল আপেক্ষিক বিন্যাস যা তালিকার ভিউয়ের নীচে বোতামগুলি সেট করে। এই উদাহরণে বোতামগুলিও রৈখিক বিন্যাসে থাকে কারণ সমান আকারে এগুলি পাশাপাশি রেখে দেওয়া সহজ।

<RelativeLayout android:id="@+id/RelativeLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent">

<ListView android:id="@+id/ListView01" 
android:layout_alignParentTop="true"
android:layout_width="fill_parent" 
android:layout_height="fill_parent">
</ListView>

<LinearLayout android:id="@+id/LinearLayout01" 
android:layout_below="@+id/ListView01" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true">
<Button android:id="@+id/ButtonJoin" 
android:text="Join"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_alignParentBottom="true">
</Button>
<Button android:id="@+id/ButtonJoin" 
android:layout_alignRight="@id/ButtonCancel" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel"
android:layout_alignParentBottom="true">
</Button>
</LinearLayout>

</RelativeLayout>

সমস্যাটি হ'ল তালিকার ভিউটি দীর্ঘ হলেও, এটি নীচে বোতামগুলির শীর্ষের উপরে প্রসারিত। কীভাবে এটি বোতামগুলির উপরে থামতে হবে তা আমি বুঝতে পারি না।
ক্লিপটাইন

2
আপনি যদি ব্যবহার করে থাকেন (আমার মনে হয় 1.5, সম্ভবত এমনকি 1.6) আপেক্ষিক লেআউট বিধিগুলি ব্যবহার করার সময় আপনার তালিকাগুলির আগে বোতামগুলি থাকা আবশ্যক - অন্যথায়, লেআউটটি এখনও বোতামগুলি সচেতন নয় কারণ এটি আপনার তালিকার ক্রমটি প্রসারিত করে তাদের অতীত
টিম এইচ

এটি আমার পক্ষে কাজ করে না। টিম এইচ যেমন বলেছে, আমার জন্য অবশ্যই আমাকে লিনিয়ারলআউটয়ের পরে তালিকাটি রাখা উচিত এবং তারপরে উপরে রেপকের জবাবের মতো তালিকাভিত্তিক লেআউট_ও উপরে তৈরি করতে হবে।
নেমি

এটি কাজ করবে না, বোতামটি স্ক্রিনে থাকবে না এবং স্ক্রোল করবে না
বৈভব মিশ্র

1

আমি জানি এই পোস্টটি বরং পুরানো, তবে, মূল পোস্টারের প্রশ্নের উত্তর দেওয়ার জন্য, কোডটি কাজ না করার কারণটি ছিল বোতাম.সেটআইডি () রিটার্ন -1। আপনি যদি এটি করতে যাচ্ছেন তবে আপনাকে কল বোতাম.সেটআইডি (10) এর মতো কিছু করতে হবে। যদি আপনি এটি করেন, কোডটি ঠিক কাজ করে।


0

এই কাজ করা উচিত. তালিকার উপরেও বোতামগুলি রাখতে, বোতামগুলি অন্য রৈখিক বিন্যাসের ভিতরে রাখুন।

<LinearLayout> main container // vertical

<LinearLayout> scrollview must be contained in a linear layout //vertical - height to fill parent

    <ScrollView> set the height of this to fill parent

        <ListView> will be contained in the scrollview
        </ListView>

    </ScrollView>

</LinearLayout>

<LinearLayout> //horizontal - height to wrap content

<Button>

</Button>

</LinearLayout>

</LinearLayout>

0

সবচেয়ে সহজ সমাধান হ'ল দুটি লিনিয়ার লেআউট তৈরি করা, একটি বোতামের সাথে এবং অন্যটি তালিকার ভিউ (বোতামের উচ্চতায় সামগ্রী মোড়ানো এবং তালিকার লেআউটের উচ্চতায় প্যারেন্টের সাথে মেলে)। তারপরে কেবলমাত্র তালিকা ভিউ সহ লেআউটটির উপরে একটি স্ক্রোল ভিউ করুন এবং বোতামের বিন্যাস উপেক্ষা করা হবে। আশা করি এটি সাহায্য করে, দুঃখিত আমি কোডটি লেখার মতো অনুভব করি না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.