How to show one layout on top of the other programmatically in my case?

前端 未结 3 1187
清酒与你
清酒与你 2020-11-28 19:53

My main layout main.xml simply contains two LinearLayouts:

  • The 1st LinearLayout hosts a VideoView and a Button
相关标签:
3条回答
  • 2020-11-28 20:37

    The answer, given by Alexandru is working quite nice. As he said, it is important that this "accessor"-view is added as the last element. Here is some code which did the trick for me:

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

    in Java:

    final MaterialDialog materialDialog = (MaterialDialog) dialogInterface;
    
    FrameLayout frameLayout = (FrameLayout) materialDialog
            .findViewById(R.id.icon_frame_container);
    
    frameLayout.setOnTouchListener(
            new OnSwipeTouchListener(ShowCardActivity.this) {
    
    0 讨论(0)
  • 2020-11-28 20:45

    Use a FrameLayout with two children. The two children will be overlapped. This is recommended in one of the tutorials from Android actually, it's not a hack...

    Here is an example where a TextView is displayed on top of an 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>
    

    Here is the result

    0 讨论(0)
  • 2020-11-28 20:57

    FrameLayout is not the better way to do this:

    Use RelativeLayout instead. You can position the elements anywhere you like. The element that comes after, has the higher z-index than the previous one (i.e. it comes over the previous one).

    Example:

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

    0 讨论(0)
提交回复
热议问题