Android XML布局分层

时间:2017-08-22 22:09:23

标签: android xml android-layout

是否有一种普遍接受的方式?我的主屏幕最初看起来像下面的图像,使用下面的代码,提示用户开始游戏。

Original home screen

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

    <com.example.android.snake.SnakeView
     android:id="@+id/snake"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
                tileSize="24" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
         android:id="@+id/text"
            android:text="@string/snake_layout_text_text"
            android:visibility="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center_horizontal"
            android:textColor="#ff8888ff"
            android:textSize="24sp"/>
    </RelativeLayout>
</FrameLayout>

这没有任何错误,但我需要为用户输入添加项目(EditText)并显示最后5个分数(按钮),并希望在它下面显示此提示,而不是让玩家通过多个屏幕。根据我的阅读,我应该能够在RelativeLayout中嵌入一个没有冲突的FrameLayout,但它只适用于Show Scores按钮并且缺少游戏提示。当我在设计视图中检查它时,我现在也收到一个错误,即下半部分(现在显示)未能实例化允许游戏进行的类。我根本不知道如何纠正这一点,并想了解我做错了什么,以免在未来的项目中再次发生这种情况。以下是导致错误的修改后的代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Username"
        android:id="@+id/textViewName"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextName"/>

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="?android:attr/buttonStyleSmall"
        android:text="Add"
        android:id="@+id/btnAdd"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Last 5 Games"
        android:id="@+id/btnLastFive"/>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.example.android.snake.SnakeView
        android:id="@+id/snake"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tileSize="24" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/text"
            android:visibility="visible"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center_horizontal"
            android:textColor="#ff8888ff"
            android:textSize="24sp"/>
    </RelativeLayout>
    </FrameLayout>
</LinearLayout>

Proposed layout

1 个答案:

答案 0 :(得分:0)

您应该在根布局上添加自定义视图com.example.android.snake.SnakeView的命名空间,并在声明自定义视图属性之前添加命名空间前缀。

因此,假设名称空间是&#34; app&#34;,tileSize就变为app:tileSize

<LinearLayout
    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"
    android:orientation="vertical">

    ......

    <com.example.android.snake.SnakeView
        android:id="@+id/snake"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:tileSize="24" />

    .....

</LinearLayout>

您似乎已删除了文字内容&#34; Snake按下播放&#34;从TextView @+id/text开始,否则您将无法看到它。