在Android Layout xml文件中放置TextView,EditText和Button

时间:2014-04-08 15:30:46

标签: android android-layout android-view android-xml

我是android编程的新手,我正在尝试了解android架构以及如何围绕它构建应用程序。

所以到目前为止还没有现实世界的需要。它只是我正在做的一些实验来学习这些东西。我想要的是3个不同的视图,TextView,EditText和Button,彼此水平相邻。为了实现这一目标,我使用的是activity_main.xml: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

  <EditText android:id="@+id/edit_message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/edit_message" />

  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/text_to_appear_on_button" />

</LinearLayout>

在onCreate()中运行具有setContentView(R.layout.activity_main);的MainActivity.java时,我在屏幕上获取TextView和EditText小部件,水平地彼此相邻,但不是Button 。我想知道为什么?

  

奇怪的是,我观察到里面的最后一个元素   <LinearLayout>..</LinearLayout>   是从屏幕上消失的那个。因此,如果<Button .. />与说<TextView .. />交换,则其<TextView>元素现在在屏幕上不可见。

请解释我在这里错过了什么。

我在模拟器上运行MainActivity.java并使用Eclipse作为我的IDE,如果这些信息有助于进一步帮助。

2 个答案:

答案 0 :(得分:1)

这取决于你想做什么。如果你想在LinearLayout水平放置三件事,你可能会在屏幕上用完空间。为了保证所有三个都合适,设置:

android:layout_width="match_parent"
android:layout_weight="1"

对于所有人3.您可以根据需要调整重量,但基本上这将告诉渲染水平地适应屏幕上的所有三个对象,每个对象占据屏幕的1/3(如果您更改重量,它将是不同的值)。

如果使用LinearLayout,您可能会嵌套多个布局,主垂直LinearLayout包含多个水平布局。这是一种有效的方法,可能是一个偏好问题。 LinearLayout允许权重,这可能非常有用,因为它们是保证事物不会被屏幕切断的一种方式。

RelativeLayout是另一种方法,您可以在其中指定屏幕上的内容相对于彼此的位置(左侧,右侧,上方,下方)。虽然这些不使用权重,但您可以将元素与屏幕边缘对齐并获得相同的效果。

正如我所说,这种做法在很大程度上取决于偏好,通常两种网格都很有效。

答案 1 :(得分:1)

我建议你使用xml的相对布局,如果你使用线性,你的小部件是逐个分配的,而不是你的愿望。你的进一步发展

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/RelativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="101dp"
            android:layout_marginTop="50dp"
            android:text="TextView" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="67dp"
            android:ems="10" >

            <requestFocus />
        </EditText>

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText1"
            android:layout_below="@+id/editText1"
            android:layout_marginTop="59dp"
            android:text="Button" />

    </RelativeLayout>