আমার ক্ষেত্রে প্রোগ্রামেমেটিক্যালি অন্যটির উপরে একটি বিন্যাস কীভাবে প্রদর্শিত হবে?


84

আমার মূল বিন্যাস main.xml এ দুটি লাইনারিআউটআউট রয়েছে:

  • 1 ম LinearLayoutহোস্ট এ VideoViewএবং এ Button,
  • 2 য় LinearLayoutএকটি হোস্ট করে EditTextএবং LinearLayoutএটি " GONE " ( ) এ দৃশ্যমানতার মান সেট করেছেandroid:visibility="gone"

নীচের মত:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
        android:orientation="vertical"
>
    <LinearLayout 
        android:id="@+id/first_ll"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"

    >
        <VideoView 
            android:id="@+id/my_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="9"
        />

        <Button
            android:id="@+id/my_btn"
            android:layout_width="30dip" 
            android:layout_height="30dip"
            android:layout_gravity="right|bottom"
                android:layout_weight="1"
        />

    </LinearLayout>

    <LinearLayout 
        android:id="@+id/second_ll"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="2dip"

        android:visibility="gone"
    >
        <EditText 
            android:id="@+id/edit_text_field"
            android:layout_height="40dip"
            android:layout_width="fill_parent"
            android:layout_weight="5"
            android:layout_gravity="center_vertical"
        />

    </LinearLayout>
</LinearLayout>

আমি এই বৈশিষ্ট্যটি সফলভাবে প্রয়োগ করেছি যে যখন Button(my_btn আইডি সহ) টিপানো হয়, নীচের জাভা কোড সহ ফিল্ড সহ য়টি প্রদর্শিত হবে:LinearLayoutEditText

LinearLayout secondLL = (LinearLayout) findViewById(R.id.second_ll);

Button myBtn = (Button) findViewById(R.id.my_btn);
myBtn.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v){
        int visibility = secondLL.getVisibility();

        if(visibility==View.GONE)
            secondLL.setVisibility(View.VISIBLE);

    }
}); 

জাভা উপরের কোড দিয়ে, 2nd LinearLayout সঙ্গে EditTextমত দেখানো হয় নিচে সংযোজন 1 ম LinearLayout যা জ্ঞান করে তোলে।

কিন্তু , আমি কি প্রয়োজন: যখন Button(ID: my_btn) টেপা হলে, 2nd LinearLayout সঙ্গে EditText শীর্ষে দেখানো হয় 1 ম LinearLayout , এটি দেখতে এরকম 2nd LinearLayout সঙ্গে EditTextপর্দার নীচে থেকে ওঠা হয়, এবং 2nd LinearLayout সঙ্গে EditTextশুধুমাত্র অংশ ব্যাপৃত নীচে থেকে পর্দা, এটি 1 ম লিনিয়ারলআউট এখনও দৃশ্যমান, নীচের চিত্রটির মতো দেখানো হয়েছে:

এখানে চিত্র বর্ণনা লিখুন

সুতরাং যখন Button(ID: my_btn) টেপা হলে কিভাবে দেখানোর জন্য 2nd LinearLayout সঙ্গে EditText শীর্ষে 1 ম LinearLayout পরিবর্তে সংযোজন 2nd LinearLayout নিচে 1st LinearLayout প্রোগ্রামেটিক্যালি?

উত্তর:


187

দুটি বাচ্চা সহ ফ্রেমলাউট ব্যবহার করুন। দুটি বাচ্চা ওভারল্যাপ হয়ে যাবে। অ্যান্ড্রয়েডের টিউটোরিয়ালগুলির একটিতে এটির প্রস্তাব দেওয়া হয়েছে, এটি কোনও হ্যাক নয় ...

এখানে একটি উদাহরণ যেখানে একটি চিত্রভিউয়ের উপরে একটি পাঠ্যদর্শন প্রদর্শিত হয়:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <ImageView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 

    android:scaleType="center"
    android:src="@drawable/golden_gate" />

  <TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"

    android:padding="12dip"

    android:background="#AA000000"
    android:textColor="#ffffffff"

    android:text="Golden Gate" />

</FrameLayout>

ফলাফল এখানে


14
এই কোডে, কি TextViewশীর্ষে তোলে ? এটি তালিকার দ্বিতীয় অবস্থানে থাকার কারণে?
অ্যাডাম জনস

14
ফ্রেমলআউট ডক্স যেমন বলে: চূড়ান্ত দৃষ্টিভঙ্গি একটি স্ট্যাকের সাথে আঁকা, শীর্ষে সর্বাধিক যুক্ত শিশু রয়েছে। এক্সএমএল লেআউটটি শীর্ষ থেকে নীচে পার্স করা হয়েছে তা বিবেচনা করে টেক্সটভিউ আইটেমটি এক্সএমএলের সর্বশেষটি হিসাবে শীর্ষে আঁকা।
ম্যাকিয়েজ পিগলস্কি

আমি এটি চেষ্টা করছি তবে ফ্রেমলাউটের প্রথম সন্তান হিসাবে স্ক্রোলভিউ এবং দ্বিতীয় সন্তানের হিসাবে টেক্সটভিউ দিয়ে। তবে এখানে এটি ব্যাকগ্রাউন্ডে স্ক্রোলভিউ দেখাচ্ছে না। কোন সাহায্য.
রাজু

4
ধন্যবাদ ভাই! এই উত্তরটি আমি ঠিক কী খুঁজছিলাম! দুর্দান্ত! @ রাজু: আপনার লেআউট (পুরো স্ক্রিন) এর শেষ ক্লোজিং ট্যাগের আগে নিম্নলিখিত ফ্রেমলয়আউটটি রাখুন ... <ফ্রেমলআউট অ্যান্ড্রয়েড: আইডি = "@ + আইডি / আইকন_ফ্রেম_কন্টেইনার" অ্যান্ড্রয়েড: লেআউট_উইথ = "ম্যাচ_প্যারেন্ট" অ্যান্ড্রয়েড: লেআউট_ইহাইট = "ম্যাচ_প্যারেন্ট"> </frameLayout> এখন এটি উল্লেখ করুন এবং যথারীতি আপনার অন-ক্লিক- বা অন-টাচ-পদ্ধতিটি করুন।
মার্টিন ফেফার

4
ফ্রেমলআউটটি এখানে সঠিক পছন্দ, তবে এটিও লক্ষণীয় যে রিলেটিভলআউটগুলি যুক্ত হওয়ার সাথে সাথে সন্তানের দৃষ্টিভঙ্গি একে অপরের উপরে স্ট্যাক করার ক্ষেত্রেও একই আচরণ করবে। (আমি অ্যান্ড্রয়েডে নতুন ছিলাম এবং ভুলভাবে ভেবেছিলাম যে কেবল ফ্রেমলাউট এই উত্তরটি পড়ার পরে স্ট্যাকিং সম্পন্ন করতে পারে Who হুফসি)
লুক

5

FrameLayout এটি করার সর্বোত্তম উপায় নয়:

RelativeLayoutপরিবর্তে ব্যবহার করুন। আপনি যে কোনও জায়গায় উপাদান পছন্দ করতে পারেন। এর পরে যে উপাদানটি আসে তার পূর্বের তুলনায় উচ্চতর জেড-সূচক থাকে (যেমন এটি পূর্বেরটির চেয়ে বেশি আসে)।

উদাহরণ:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary"
        app:srcCompat="@drawable/ic_information"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is a text."
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_margin="8dp"
        android:padding="5dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:background="#A000"
        android:textColor="@android:color/white"/>
</RelativeLayout>

এখানে চিত্র বর্ণনা লিখুন


4

আলেকজান্দ্রুর দেওয়া উত্তরটি বেশ সুন্দর কাজ করছে। যেমনটি তিনি বলেছিলেন, গুরুত্বপূর্ণ যে এই "অ্যাকসেসর" -র ভিউটি শেষ উপাদান হিসাবে যুক্ত করা উচিত। এখানে কিছু কোড যা আমার জন্য কৌশলটি করেছে:

        ...

        ...

            </LinearLayout>

        </LinearLayout>

    </FrameLayout>

</LinearLayout>

<!-- place a FrameLayout (match_parent) as the last child -->
<FrameLayout
    android:id="@+id/icon_frame_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

</TabHost>

জাভাতে:

final MaterialDialog materialDialog = (MaterialDialog) dialogInterface;

FrameLayout frameLayout = (FrameLayout) materialDialog
        .findViewById(R.id.icon_frame_container);

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