मेरे मामले में दूसरे प्रोग्राम के शीर्ष पर एक लेआउट कैसे दिखाया जाए?


84

मेरा मुख्य लेआउट main.xml में केवल दो रैखिक चित्र शामिल हैं:

  • 1 LinearLayoutमेजबान एक VideoViewऔर एक Button,
  • दूसरा 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 के साथ) दबाया जाता है, तो फ़ील्ड के साथ 2 को निम्न जावा कोड के साथ दिखाया गया है: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);

    }
}); 

ऊपर दिए गए जावा कोड के साथ, 2 LinearLayout को नीचेEditText दिखाया गया है 1 LinearLayout जो समझ में आता है।

लेकिन , क्या मैं जरूरत है: जब Button(आईडी: my_btn) दबाया जाता है, 2 LinearLayout के साथ EditText के शीर्ष पर दिखाया गया है 1 LinearLayout है, जो की तरह दिखता है 2 LinearLayout के साथ EditTextस्क्रीन के नीचे से बढ़ रहा है, और 2 LinearLayout के साथEditText ही के हिस्से पर कब्जा नीचे से स्क्रीन, वह 1 लिनियरलैटआउट अभी भी दिखाई दे रहा है, जैसे नीचे दी गई छवि:

यहाँ छवि विवरण दर्ज करें

तो, जब Button(आईडी: my_btn) दबाया जाता है कैसे दिखाने के लिए 2 LinearLayout के साथ EditText की चोटी पर 1 LinearLayout के बजाय जोड़कर 2 LinearLayout नीचे 1 LinearLayout प्रोग्राम के रूप में?

जवाबों:


186

दो बच्चों के साथ एक फ्रेमलैट का उपयोग करें। दो बच्चों को ओवरलैप किया जाएगा। यह वास्तव में Android से ट्यूटोरियल में से एक में अनुशंसित है, यह हैक नहीं है ...

यहाँ एक उदाहरण है जहाँ एक TextView एक ImageView के शीर्ष पर प्रदर्शित होता है:

<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>

यहाँ परिणाम है


13
इस कोड में, TextViewशीर्ष पर क्या बनाता है ? क्या यह इसलिए है क्योंकि यह सूची में दूसरे स्थान पर आता है?
एडम जॉन्स

13
जैसा कि फ़्रेमलैटआउट डॉक्स कहता है: शीर्ष पर सबसे हाल ही में जोड़े गए बच्चे के साथ बच्चे के विचारों को एक स्टैक में खींचा जाता है। यह देखते हुए कि xml लेआउट ऊपर से नीचे तक पार्स है तब TextView आइटम को शीर्ष पर xml में पिछले एक के रूप में खींचा जाता है।
मैकीज पिगुलस्की 12

मैं यह कोशिश कर रहा हूँ, लेकिन स्क्रॉलव्यू के 1 बच्चे के रूप में और 2 बच्चे के रूप में टेक्स्ट व्यू के साथ स्क्रॉलव्यू। लेकिन यहाँ यह backgroung में स्क्रॉलव्यू नहीं दिखा रहा है। कोई मदद।
राजू

1
धन्यवाद भाई! यह जवाब वास्तव में मैं क्या देख रहा था! महान! @Raju: अपने फ्रेमवर्क (पूरी स्क्रीन) के अंतिम समापन टैग से पहले निम्नलिखित FrameLayout को रखें ... <FrameLayout Android: id = "@ id / icon_frame_container" Android: layout_width = "match_parent" Android: layout_height = "match_parent"> </ FrameLayout> अब इसे देखें और हमेशा की तरह अपने onClick- या onTouch-method को करें।
मार्टिन पीफ़र 19

1
FrameLayout यहां सही विकल्प है, लेकिन यह भी ध्यान देने योग्य है कि 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) {

4

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>

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.