Difference between revisions of "Android Studio: Membuat User Interface Sederhana"

From OnnoWiki
Jump to navigation Jump to search
 
(29 intermediate revisions by the same user not shown)
Line 48: Line 48:
 
Seperti semua View object, kita perlu mendefinsikan atribut XML tertentu untuk menspesifikasikan property EditText object.
 
Seperti semua View object, kita perlu mendefinsikan atribut XML tertentu untuk menspesifikasikan property EditText object.
  
* In the activity_my.xml file, within the <LinearLayout> element, define an <EditText> element with the id attribute set to @+id/edit_message.
+
* Di file activity_my.xml , dalam elemen  <LinearLayout> , definisikan elemen <EditText> dengan id attribut di set ke @+id/edit_message.
* Define the layout_width and layout_height attributes as wrap_content.
+
* Definisikan atribut layout_width dan layout_height sebagai wrap_content.
* Define a hint attribute as a string object named edit_message.
+
* Definisikan hint atribut sebagai string object dengan nama edit_message.
  
 
Elemen <EditText> harusnya sebagai berikut:
 
Elemen <EditText> harusnya sebagai berikut:
Line 65: Line 65:
 
'''android:id'''
 
'''android:id'''
  
    This provides a unique identifier for the view, which you can use to reference the object from your app code, such as to read and manipulate the object (you'll see this in the next lesson).
+
Ini memberikan pengenal unik untuk tampilan, yang dapat Anda gunakan untuk referensi objek dari kode app anda, seperti membaca dan memanipulasi objek.
  
    The at sign (@) is required when you're referring to any resource object from XML. It is followed by the resource type (id in this case), a slash, then the resource name (edit_message).
+
Tanda "at" (@) dibutuhkan jika kita mereferensi ke objek resource dari XML. Ini dilanjutkan dengan type resource (dalam hal ini id), sebuah slash, kemudian nama resource (edit_message).
  
 +
Tanda plus (+) sebelum type resource dibutuhkan jika kita mendefinisikan resource ID untuk pertama kali. Jika kita compile app, tool SDK akan menggunakan nama ID untuk meng-create resource ID baru dalam file project gen/R.java kita yang akan mereferensi ke elemen EditText . Dengan resource ID di declare sekali dengan cara ini, referensi lainnya ke ID tidak perlu menggunakan tanda plus (+). Penggunaan tanda plus hanya di perlukan jika menspesifikasikan resource ID baru tapi tidak perlu untuk resource yang concrete seperti string atau layout. Baca lebih lanjut tentang resource object.
  
    The plus sign (+) before the resource type is needed only when you're defining a resource ID for the first time. When you compile the app, the SDK tools use the ID name to create a new resource ID in your project's gen/R.java file that refers to the EditText element. With the resource ID declared once this way, other references to the ID do not need the plus sign. Using the plus sign is necessary only when specifying a new resource ID and not needed for concrete resources such as strings or layouts. See the sidebox for more information about resource objects.
+
'''android:layout_width''' dan '''android:layout_height'''
android:layout_width and android:layout_height
 
    Instead of using specific sizes for the width and height, the "wrap_content" value specifies that the view should be only as big as needed to fit the contents of the view. If you were to instead use "match_parent", then the EditText element would fill the screen, because it would match the size of the parent LinearLayout. For more information, see the Layouts guide.
 
android:hint
 
    This is a default string to display when the text field is empty. Instead of using a hard-coded string as the value, the "@string/edit_message" value refers to a string resource defined in a separate file. Because this refers to a concrete resource (not just an identifier), it does not need the plus sign. However, because you haven't defined the string resource yet, you’ll see a compiler error at first. You'll fix this in the next section by defining the string.
 
  
    Note: This string resource has the same name as the element ID: edit_message. However, references to resources are always scoped by the resource type (such as id or string), so using the same name does not cause collisions.
+
Daripada menggunakan ukuran tertentu untuk width dan height, nilai "wrap_content" menentukan bahwa view harus secukupnya sesuai dengan view content. Jika kita menggunakan "match_parent", maka elemen EditText akan mengisi seluruh layar, karena dia akan mencocokan ukuran dari parent LinearLayout.
  
 +
'''android:hint'''
  
 +
Ini adalah default string yang akan di display jika text field kosong. Kita tidak menggunakan hard-coded string, nilai "@string/edit_message" mereferensi kepada string resource yang didefinisikan di file yang berbeda. Karena ini me-referensi kepada sebuah concrete resource (bukan sekedar sebuah identifier), dia tidak membutuhkan tanda plus. Akan tetapi, karena kita belum mendefinisikan string resource, kita akan melihat error compiler. Kita akan memperbaikinya di bagian selanjutnya dengan cara mendefinisikan string.
  
 +
Catatan: string resource mempunyai nama yang sama dengan elemen ID: edit_message. Akan tetapi, referensi ke resource selalu di batasi oleh resource type (seperti id atau string), oleh karenanya penggunaan nama yang sama tidak menyebabkan tabrakan.
  
 +
==Resource Object==
  
 +
Sebuah resource object adalah sebuah nama unik integer yang berasosiasi dengan app resource, seperti sebuah bitmap, file layout atau string.
  
 +
Setiap resource mempunyai resource object-nya yang di definisikan di file project gen/R.java. Kita dapat menggunakan nama object di R class untuk me-referensi resource yang kita gunakan, misalnya kita perlu men-spesifikasi sebuah string untuk atribut android:hint . Kita juga dapat membuat resource ID sembarang yang dapat di asosiasikan dengan sebuah view menggunakan atribut android:id , yang memungkinkan kita untuk melakukan referebsi view tersebut dari program lain.
  
    Resource Objects
+
SDK tool akan membuat file R.java setiap kali kita mengcompile app. Jangan mengubah file tersebut dengan tangan.
  
    A resource object is a unique integer name that's associated with an app resource, such as a bitmap, layout file, or string.
+
==Menambahkan String Resource==
  
    Every resource has a corresponding resource object defined in your project's gen/R.java file. You can use the object names in the R class to refer to your resources, such as when you need to specify a string value for the android:hint attribute. You can also create arbitrary resource IDs that you associate with a view using the android:id attribute, which allows you to reference that view from other code.
+
Secara default, Android project kita termasuk file string resource di res/values/strings.xml. Disini, kita akan menambahkan sebuah string baru dengan nama "edit_message" dan men-set isi-nya dengan "Enter a message."
  
    The SDK tools generate the R.java file each time you compile your app. You should never modify this file by hand.
+
* Di Android Studio, dari directory res/values , buka strings.xml.
 +
* Tambahkan kalimat untuk sebuah string dengan nama "edit_message" yang isinya , "Enter a message".
 +
* Tambahkan sebuah kalimat untuk sebuah string dengan nama "button_send" yang isinya, "Send". Kita akan membuat tombol yang menggunakan string tersebut di bagian ini.
 +
* Buang kalimat untuk "hello world" .
  
    For more information, read the guide to Providing Resources.
+
Hasil strings.xml akan tampak sebagai berikut:
 +
 
 +
res/values/strings.xml
 +
 
 +
<?xml version="1.0" encoding="utf-8"?>
 +
<resources>
 +
    <string name="app_name">My First App</string>
 +
    <string name="edit_message">Enter a message</string>
 +
    <string name="button_send">Send</string>
 +
    <string name="action_settings">Settings</string>
 +
    <string name="title_activity_main">MainActivity</string>
 +
</resources>
 +
 
 +
Untuk text di user interface, selalu men-spesifikasi setiap string sebagai sebuah resource. String resource memungkinkan kita untuk memanage semua UI text dalam sebuah lokasi, ini memudahkan kita jika text tersebut perlu di cari dan di update. Membuat external string juga memungkinkan kita untuk me-lokalisasi app kita untuk berbagai bahasa dengan memberikan alternatif definisi untuk setiap string resource.
 +
 
 +
==Add a Button==
 +
 
 +
* Di Android Studio, from the res/layout directory, edit the activity_my.xml file.
 +
* Dalam elemen <LinearLayout> , definisikan elemen <Button> langsung sesudah elemen <EditText> .
 +
* Set atribut width dan height dari button ke "wrap_content" agar button tersebut besarnya secukupnya agar cukup dengan text label button.
 +
* Definisikan text label button dengan android:text attribute; set isinya dengan button_send string resource yang telah kita definisikan di bagian sebelumnya.
 +
 
 +
<LinearLayout> kita akan tampak sebagai berikut:
 +
 
 +
res/layout/activity_my.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:orientation="horizontal" >
 +
      <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/button_send" />
 +
</LinearLayout>
 +
 
 +
Catatan: Button ini tidak membutuhkan atribut android:id , karena tidak di gunakan / di referensi dari activity code.
 +
 
 +
Layout yang digunakan sekarang di rancang agar EditText dan Button widget besarnya secukupnya untuk pas dengan content / isi-nya.
 +
 
 +
[[Image:Edittext wrap.png|center|200px|thumb|EditText dan Button widget yang width di set ke "wrap_content"]].
 +
 
 +
Cara ini berjalan dengan baik untuk button, tapi tidak terlalu baik untuk text field, karena kemungkinan pengguna akan mengetik sesuatu yang panjang. Akan lebih baik jika untuk memenuhi screen yang tidak digunakan dengan text field. Kita dapat melakukan ini dalam LinearLayout dengan weight property, yang mana kita dapat men-spesifikasikannya menggunakan atribut android:layout_weight .
 +
 
 +
Nilai weight adalah angka yang men-spesifikasi besar-nya sisa tempat dalam setiap view yang sebaiknya digunakan, relatif ke jumlah yang di gunakan oleh view tetangga. Contoh, jika kita ingin memberikan satu view dengan bobot 2 dan satu lain dengan bobot 1, maka jumlahnya adalah 3. Oleh karenanya view pertama mengisi 2/3 maka view ke dua akan mengisi sisanya. Jika kita ingin menambahkan view ke tiga dan memberikan bobot 1, maka view pertama (dengan bobot 2) sekarang akan memperoleh 1/2 dari sisa tempat, sementara dua sisanya akan memperoleh masing-masing 1/4 dari tempat yang ada.
 +
 
 +
Default bobot untuk semua view adalah 0, oleh karenanya jika kita men-spesifikasi nilai weight lebih besar dari 0 untuk hanya satu view, maka view tersebut akan memenuhi semua sisa tempat yang ada setelah semua view memperoleh tempat dibutuhkannya.
 +
 
 +
 
 +
==Membuat Input Box memenuhi Screen Width==
 +
 
 +
Untuk mengisi sisa tempat di layout kita dengan elemen EditText, lakukan hal berikut:
 +
 
 +
* Di file activity_my.xml , set elemen <EditText> atribut layout_weight menjadi 1.
 +
* kemudian, set elemen <EditText> atribut layout_width menjadi  0dp.
 +
 
 +
res/layout/activity_my.xml
 +
 
 +
<EditText
 +
    android:layout_weight="1"
 +
    android:layout_width="0dp"
 +
    ... />
 +
 
 +
* Untuk memperbaiki effisiensi layout saat kita men-spesifikasi weight, kita akan mengubah width dari EditText menjadi zero (0dp). Dengan menset width ke nol akan memperbaiki performance layout karena menggunakan "wrap_content" sebagai width akan menyebabkan sistem untuk menghitung width yang akhirnya menjadi tidak relevan karena nilai bobot membutuhkan yang lain untuk menghitung width yang harus di isi.
 +
 
 +
Gambar 3 memperlihatkan saat kita mengalokasikan semua bobot ke elemen EditText .
 +
 
 +
[[Image:Edittext gravity.png|center|200px|thumb|Gambar 3 EditText widget yang diberikan semua layout weight, sehingga dia akan mengisi semua tempat sisa yang ada di LinearLayout.]]
 +
 
 +
Berikut adalah file layout activity_my.xml yang lengkap:
 +
 
 +
res/layout/activity_my.xml
 +
 
 +
<?xml version="1.0" encoding="utf-8"?>
 +
<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:orientation="horizontal">
 +
      <EditText android:id="@+id/edit_message"
 +
        android:layout_weight="1"
 +
        android:layout_width="0dp"
 +
        android:layout_height="wrap_content"
 +
        android:hint="@string/edit_message" />
 +
    <Button
 +
        android:layout_width="wrap_content"
 +
        android:layout_height="wrap_content"
 +
        android:text="@string/button_send" />
 +
</LinearLayout>
  
 
==Referensi==
 
==Referensi==
  
 
* https://developer.android.com/training/basics/firstapp/building-ui.html
 
* https://developer.android.com/training/basics/firstapp/building-ui.html

Latest revision as of 08:19, 7 May 2015

Sumber: https://developer.android.com/training/basics/firstapp/building-ui.html


Pada bagian ini, kita akan belajar membuat layout di XML termasuk kolom text dan tombol. Pada bagian selanjutnya, kita akan belajar bagaimana agar aplikasi yang kita kembangkan meresponds ke tombol yang di tekas dengan mengirimkan isi dari kolom text ke activity yang lain.

Graphical User Interface (GUI) di app Android dibangun mengunakan hirarki dari object View dan ViewGroup. Object View biasanya UI widget seperti tombol atau kolom text. Object ViewGroup biasanya container visa yang terlihat yang mendefinisikan bagaimana child view di layout, seperti berbentuk grid atau daftar vertikal.

Android memberikan vocabulary XML yang berhubungan dengan subclass dari View dan ViewGroup sehingga kita dapat mendefinisikan UI kita di XML menggunakan hirarki dari elemen UI.

Layout adalah subclass dari ViewGroup. Dalam latihan ini, kita akan bekerja dengan LinearLayout.

Viewgroup.png


Membuat Linear Layout

  • Di Android Studio, dari directory res/layout , buka activity_my.xml . Template BlankActivity yang dipilih saat kita membuat project ini termasuk di dalamnya file activity_my.xml dengan root view RelativeLayout dan child view TextView .
  • Di Preview pane, klik Hide icon untuk menutup Preview pane.
  • Di Android Studio, ketika kita membuka layout file, kita pertama kali akan di perlihatkan Preview pane. Klik elements di pane ini dan buka tool WYSIWYG tools di Design pane. Pada kesempatan ini, kita akan bekerja langsung dengan XML.
  • Delete elemen <TextView> .
  • Ubah elemen <RelativeLayout> ke <LinearLayout>.
  • Tambahkan atribut android:orientation set ke "horizontal".
  • Buang atribut android:padding dan tools:context .

Hasilnya sebagai berikut:

res/layout/activity_my.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:orientation="horizontal" >
</LinearLayout>

LinearLayout adalah view group (subclass dan ViewGroup) yang akan me-layout child view baik orientasi vertical atau horizontal, seperti yang di spesifikasikan di atribut android:orientation . Setiap child dari LinearLayout akan muncul di layar sesuai dengan urutan dia muncul di XML.

Dua atribut lain, android:layout_width dan android:layout_height, dibutuhkan untuk semua views untuk menentukan size mereka.

Karena LinearLayout adalah root view di layout, dia harus mengisi seluruh area screen yang tersedia agar apps dengan cara menset width (lebar) dan height (tinggi) ke "match_parent". Nilai ini mendeklarasikan bahwa view harus memperlebar width atau height untuk mencocokan dengan width atau height dari parent view.

Untuk informasi lebih lanjut tentang layout properties, ada baiknya membaca Android Studio: Layout Layar


Menambahkan Text Field

Seperti semua View object, kita perlu mendefinsikan atribut XML tertentu untuk menspesifikasikan property EditText object.

  • Di file activity_my.xml , dalam elemen <LinearLayout> , definisikan elemen <EditText> dengan id attribut di set ke @+id/edit_message.
  • Definisikan atribut layout_width dan layout_height sebagai wrap_content.
  • Definisikan hint atribut sebagai string object dengan nama edit_message.

Elemen <EditText> harusnya sebagai berikut:

res/layout/activity_my.xml
<EditText android:id="@+id/edit_message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/edit_message" />

Disini kita menambahkan atribut <EditText> :

android:id

Ini memberikan pengenal unik untuk tampilan, yang dapat Anda gunakan untuk referensi objek dari kode app anda, seperti membaca dan memanipulasi objek.

Tanda "at" (@) dibutuhkan jika kita mereferensi ke objek resource dari XML. Ini dilanjutkan dengan type resource (dalam hal ini id), sebuah slash, kemudian nama resource (edit_message).

Tanda plus (+) sebelum type resource dibutuhkan jika kita mendefinisikan resource ID untuk pertama kali. Jika kita compile app, tool SDK akan menggunakan nama ID untuk meng-create resource ID baru dalam file project gen/R.java kita yang akan mereferensi ke elemen EditText . Dengan resource ID di declare sekali dengan cara ini, referensi lainnya ke ID tidak perlu menggunakan tanda plus (+). Penggunaan tanda plus hanya di perlukan jika menspesifikasikan resource ID baru tapi tidak perlu untuk resource yang concrete seperti string atau layout. Baca lebih lanjut tentang resource object.

android:layout_width dan android:layout_height

Daripada menggunakan ukuran tertentu untuk width dan height, nilai "wrap_content" menentukan bahwa view harus secukupnya sesuai dengan view content. Jika kita menggunakan "match_parent", maka elemen EditText akan mengisi seluruh layar, karena dia akan mencocokan ukuran dari parent LinearLayout.

android:hint

Ini adalah default string yang akan di display jika text field kosong. Kita tidak menggunakan hard-coded string, nilai "@string/edit_message" mereferensi kepada string resource yang didefinisikan di file yang berbeda. Karena ini me-referensi kepada sebuah concrete resource (bukan sekedar sebuah identifier), dia tidak membutuhkan tanda plus. Akan tetapi, karena kita belum mendefinisikan string resource, kita akan melihat error compiler. Kita akan memperbaikinya di bagian selanjutnya dengan cara mendefinisikan string.

Catatan: string resource mempunyai nama yang sama dengan elemen ID: edit_message. Akan tetapi, referensi ke resource selalu di batasi oleh resource type (seperti id atau string), oleh karenanya penggunaan nama yang sama tidak menyebabkan tabrakan.

Resource Object

Sebuah resource object adalah sebuah nama unik integer yang berasosiasi dengan app resource, seperti sebuah bitmap, file layout atau string.

Setiap resource mempunyai resource object-nya yang di definisikan di file project gen/R.java. Kita dapat menggunakan nama object di R class untuk me-referensi resource yang kita gunakan, misalnya kita perlu men-spesifikasi sebuah string untuk atribut android:hint . Kita juga dapat membuat resource ID sembarang yang dapat di asosiasikan dengan sebuah view menggunakan atribut android:id , yang memungkinkan kita untuk melakukan referebsi view tersebut dari program lain.

SDK tool akan membuat file R.java setiap kali kita mengcompile app. Jangan mengubah file tersebut dengan tangan.

Menambahkan String Resource

Secara default, Android project kita termasuk file string resource di res/values/strings.xml. Disini, kita akan menambahkan sebuah string baru dengan nama "edit_message" dan men-set isi-nya dengan "Enter a message."

  • Di Android Studio, dari directory res/values , buka strings.xml.
  • Tambahkan kalimat untuk sebuah string dengan nama "edit_message" yang isinya , "Enter a message".
  • Tambahkan sebuah kalimat untuk sebuah string dengan nama "button_send" yang isinya, "Send". Kita akan membuat tombol yang menggunakan string tersebut di bagian ini.
  • Buang kalimat untuk "hello world" .

Hasil strings.xml akan tampak sebagai berikut:

res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">My First App</string>
    <string name="edit_message">Enter a message</string>
    <string name="button_send">Send</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
</resources>

Untuk text di user interface, selalu men-spesifikasi setiap string sebagai sebuah resource. String resource memungkinkan kita untuk memanage semua UI text dalam sebuah lokasi, ini memudahkan kita jika text tersebut perlu di cari dan di update. Membuat external string juga memungkinkan kita untuk me-lokalisasi app kita untuk berbagai bahasa dengan memberikan alternatif definisi untuk setiap string resource.

Add a Button

  • Di Android Studio, from the res/layout directory, edit the activity_my.xml file.
  • Dalam elemen <LinearLayout> , definisikan elemen <Button> langsung sesudah elemen <EditText> .
  • Set atribut width dan height dari button ke "wrap_content" agar button tersebut besarnya secukupnya agar cukup dengan text label button.
  • Definisikan text label button dengan android:text attribute; set isinya dengan button_send string resource yang telah kita definisikan di bagian sebelumnya.

<LinearLayout> kita akan tampak sebagai berikut:

res/layout/activity_my.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:orientation="horizontal" >
      <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/button_send" />
</LinearLayout>

Catatan: Button ini tidak membutuhkan atribut android:id , karena tidak di gunakan / di referensi dari activity code.

Layout yang digunakan sekarang di rancang agar EditText dan Button widget besarnya secukupnya untuk pas dengan content / isi-nya.

EditText dan Button widget yang width di set ke "wrap_content"

.

Cara ini berjalan dengan baik untuk button, tapi tidak terlalu baik untuk text field, karena kemungkinan pengguna akan mengetik sesuatu yang panjang. Akan lebih baik jika untuk memenuhi screen yang tidak digunakan dengan text field. Kita dapat melakukan ini dalam LinearLayout dengan weight property, yang mana kita dapat men-spesifikasikannya menggunakan atribut android:layout_weight .

Nilai weight adalah angka yang men-spesifikasi besar-nya sisa tempat dalam setiap view yang sebaiknya digunakan, relatif ke jumlah yang di gunakan oleh view tetangga. Contoh, jika kita ingin memberikan satu view dengan bobot 2 dan satu lain dengan bobot 1, maka jumlahnya adalah 3. Oleh karenanya view pertama mengisi 2/3 maka view ke dua akan mengisi sisanya. Jika kita ingin menambahkan view ke tiga dan memberikan bobot 1, maka view pertama (dengan bobot 2) sekarang akan memperoleh 1/2 dari sisa tempat, sementara dua sisanya akan memperoleh masing-masing 1/4 dari tempat yang ada.

Default bobot untuk semua view adalah 0, oleh karenanya jika kita men-spesifikasi nilai weight lebih besar dari 0 untuk hanya satu view, maka view tersebut akan memenuhi semua sisa tempat yang ada setelah semua view memperoleh tempat dibutuhkannya.


Membuat Input Box memenuhi Screen Width

Untuk mengisi sisa tempat di layout kita dengan elemen EditText, lakukan hal berikut:

  • Di file activity_my.xml , set elemen <EditText> atribut layout_weight menjadi 1.
  • kemudian, set elemen <EditText> atribut layout_width menjadi 0dp.
res/layout/activity_my.xml
<EditText
    android:layout_weight="1"
    android:layout_width="0dp"
    ... />
  • Untuk memperbaiki effisiensi layout saat kita men-spesifikasi weight, kita akan mengubah width dari EditText menjadi zero (0dp). Dengan menset width ke nol akan memperbaiki performance layout karena menggunakan "wrap_content" sebagai width akan menyebabkan sistem untuk menghitung width yang akhirnya menjadi tidak relevan karena nilai bobot membutuhkan yang lain untuk menghitung width yang harus di isi.

Gambar 3 memperlihatkan saat kita mengalokasikan semua bobot ke elemen EditText .

Gambar 3 EditText widget yang diberikan semua layout weight, sehingga dia akan mengisi semua tempat sisa yang ada di LinearLayout.

Berikut adalah file layout activity_my.xml yang lengkap:

res/layout/activity_my.xml
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="horizontal">
     <EditText android:id="@+id/edit_message" 
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
</LinearLayout>

Referensi