如何控制重叠元素android活动的绘制顺序?

时间:2017-08-25 12:02:13

标签: android user-interface drawing views

我想我已经尝试和研究了足够的,如果不是所有的东西,但我只是不能让右侧的两个图标显示在android模拟器中。 奇怪的是,它们在设计窗口中完全可见。 此外,使用类似/相同的GUI设计,其他活动可以很好地显示我的所有元素。

我已经很清楚了,视图在屏幕上重叠的方式取决于元素的顺序,因为我将它们放在'组件树' Android Studio IDE。

在Android Studio中正确查看设计:

enter image description here

模拟器右侧缺少图标:

enter image description here

此外,应用程序错过了标题,这可能是由于一个不合适的父活动类(Activity我从AppCompatActivity改变了,因为我花了很长时间使用AS设计工具)

  1. 如何在重叠时控制元素的顺序
  2. 我还缺少什么奇怪的Android概念
  3. 或者自从一切正常以来发生了什么变化?
  4. 以下是应用程序设计的代码XML:

    <?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.sbm.bc.smartbooksmobile.ActivityTeacherHwkCheckByTask">
    
    <ImageView
        android:id="@+id/Problems"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_gravity="right"
        android:layout_marginTop="57dp"
        android:elevation="24dp"
        android:visibility="visible"
        app:srcCompat="@drawable/ic_problems" />
    
    <ImageView
        android:id="@+id/Talar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_gravity="right"
        android:layout_marginRight="42dp"
        android:layout_marginTop="57dp"
        android:elevation="24dp"
        android:visibility="visible"
        app:srcCompat="@drawable/ic_menu_talar" />
    
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_dark"
        android:fitsSystemWindows="true">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </android.support.design.widget.AppBarLayout>
    
    
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="45dp"
        android:background="@android:color/holo_blue_bright">
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="40dp"
            android:visibility="visible">
    
            <LinearLayout
                android:id="@+id/ListOfTaskRows"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:elevation="24dp"
                android:orientation="vertical"
                android:visibility="visible">
    
            </LinearLayout>
        </ScrollView>
    
    </TableRow>
    
    <TextView
        android:id="@+id/Description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="63dp"
        android:allowUndo="false"
        android:elevation="20dp"
        android:ems="10"
        android:text="Úloha"
        android:textAlignment="center"
        android:textSize="18sp"
        android:visibility="visible" />
    
    </RelativeLayout>
    

3 个答案:

答案 0 :(得分:0)

我认为你错过了这样一个事实,即RelativeLayout个孩子如果重叠就会被吸引到对方面前。在你的情况下,你有一个宽度为TableRow的{​​{1}} - 它填充了父级的宽度,但是在图像查看之后它被添加到它们前面。

您可以约束表的宽度,以便通过将其layout_alignEnd属性设置为最左侧图像的ID来为图像留出空间,以便表格在图像开始处结束。

答案 1 :(得分:0)

嗯,不管你不相信图标丢失的原因是,我决定从普通的Activity中导出我的应用程序而不是之前的AppCompatActivity。

所以我再次将我的活动恢复到extends AppCompatActivity ,然后看看..它有效。

这当然也再次启用了活动标题。

enter image description here

由于它是一个纯粹的不存在(另一个)而我的浪费的时间已经过了几天(不仅仅是这个问题,还有许多其他糟糕的设计和ADT中明显的错误),我刚刚决定在不久的将来abbandon原生Android开发,转而使用Xamarin / C#。 (4年前我从C#Xamarin开始我的Android开发,但由于当时硬件访问支持不足而离开了)。 怎么了!

答案 2 :(得分:0)

对于“Material Design”的用户:

另一个简单的解决方法是使用"elevation" property of any GUI element。 通过增加此值,可以强制在前景上将此元素绘制到具有较低高度的元素上。 作为奖励(或缺点),您可以根据升高的数量在提升的GUI元素周围进行着色。

我想知道这个功能能延长渲染时间 另一个问题是min支持的API版本。 (没有立刻找到它。)