1<!--
2Copyright (C) 2013 The Android Open Source Project
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8     http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15-->
16
17<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
18              xmlns:tools="http://schemas.android.com/tools"
19              android:layout_width="match_parent"
20              android:layout_height="match_parent"
21              android:gravity="center_horizontal">
22    <ScrollView
23            android:layout_width="match_parent"
24            android:layout_height="match_parent"
25            android:fillViewport="false">
26        <RelativeLayout
27                android:layout_width="match_parent"
28                android:layout_height="match_parent"
29                android:paddingLeft="@dimen/activity_horizontal_margin"
30                android:paddingRight="@dimen/activity_horizontal_margin"
31                android:paddingTop="@dimen/activity_vertical_margin"
32                android:paddingBottom="@dimen/activity_vertical_margin"
33                tools:context=".MainActivity"
34                >
35
36            <!-- Notice the presence of nextFocusDown/nextFocusUp on the elements below. You can
37            also use nextFocusLeft/nextFocusRight. This tells the system in what order elements
38            should be navigated through. If not present, the system will make a guess based on
39            element location in the layout. -->
40            <TextView
41                    android:layout_width="wrap_content"
42                    android:layout_height="wrap_content"
43                    android:text="Buttons"
44                    android:id="@+id/buttonsLabel"
45                    android:layout_alignParentTop="true"
46                    android:layout_alignParentLeft="true"
47                    android:nextFocusDown="@+id/composeButton"/>
48
49            <!-- This is a regular, text-based button. No contentDescription is needed, since the
50                 text field sufficiently describes the action performed. -->
51            <Button
52                    android:layout_width="wrap_content"
53                    android:layout_height="wrap_content"
54                    android:text="@string/composeButtonLabel"
55                    android:id="@+id/composeButton"
56                    android:layout_below="@+id/buttonsLabel"
57                    android:layout_alignLeft="@+id/buttonsLabel"
58                    android:nextFocusUp="@+id/buttonsLabel"
59                    android:nextFocusDown="@+id/checkboxesLabel"
60                    />
61
62            <!-- The next two buttons are different types of image-based buttons. -->
63
64            <!-- BEGIN_INCLUDE (image_content_description) -->
65            <!-- Adding a contentDescription is needed for accessibility, since no text is present.
66            Since the contentDescription is read verbatim, you may want to be a bit more
67            descriptive than usual, such as adding "button" to the end of your description, if
68            appropriate. -->
69            <ImageButton
70                    android:layout_width="wrap_content"
71                    android:layout_height="wrap_content"
72                    android:id="@+id/discardButton"
73                    android:layout_alignTop="@+id/composeButton"
74                    android:layout_toRightOf="@+id/composeButton"
75                    android:src="@drawable/ic_action_discard"
76                    android:layout_alignBottom="@+id/composeButton"
77                    android:contentDescription="@string/discardButtonDescription"
78                    android:scaleType="fitCenter"
79                    android:nextFocusUp="@+id/buttonsLabel"
80                    android:nextFocusDown="@+id/checkboxesLabel"
81                    />
82            <!-- END_INCLUDE (image_content_description) -->
83
84            <ImageButton
85                    android:layout_width="wrap_content"
86                    android:layout_height="wrap_content"
87                    android:id="@+id/infoButton"
88                    android:layout_alignTop="@+id/discardButton"
89                    android:layout_toRightOf="@+id/discardButton"
90                    android:src="@drawable/ic_action_info"
91                    android:layout_alignBottom="@+id/discardButton"
92                    android:layout_alignRight="@+id/hyperspaceCheckbox"
93                    android:scaleType="fitCenter"
94                    android:background="?android:selectableItemBackground"
95                    android:padding="5dp"
96                    android:contentDescription="@string/infoButtonDescription"
97                    android:nextFocusUp="@+id/buttonsLabel"
98                    android:nextFocusDown="@+id/checkboxesLabel"
99            />
100
101            <TextView
102                    android:layout_width="wrap_content"
103                    android:layout_height="wrap_content"
104                    android:text="@string/checkboxesLabel"
105                    android:id="@+id/checkboxesLabel"
106                    android:layout_below="@+id/composeButton"
107                    android:layout_alignLeft="@+id/composeButton"
108                    android:nextFocusUp="@+id/composeButton"
109                    android:nextFocusDown="@+id/jetpackCheckbox"
110                    />
111
112            <!-- Like a text-based button, checkboxes with text will often work correctly as-is.
113                 If your checkboxes do not have a text attribute, you will need to add a
114                 contentDescriptoin. -->
115            <CheckBox
116                    android:layout_width="wrap_content"
117                    android:layout_height="wrap_content"
118                    android:text="@string/jetpackCheckboxLabel"
119                    android:id="@+id/jetpackCheckbox"
120                    android:layout_below="@+id/checkboxesLabel"
121                    android:layout_alignLeft="@+id/checkboxesLabel"
122                    android:checked="false"
123                    android:nextFocusUp="@+id/checkboxesLabel"
124                    android:nextFocusDown="@+id/hyperspaceCheckbox"
125                    />
126
127            <CheckBox
128                    android:layout_width="wrap_content"
129                    android:layout_height="wrap_content"
130                    android:text="@string/hyperspaceCheckboxLabel"
131                    android:id="@+id/hyperspaceCheckbox"
132                    android:layout_below="@+id/jetpackCheckbox"
133                    android:layout_alignLeft="@+id/jetpackCheckbox"
134                    android:checked="false"
135                    android:nextFocusUp="@+id/jetpackCheckbox"
136                    android:nextFocusDown="@+id/imagesAndTextLabel"
137                    />
138
139            <TextView
140                    android:layout_width="wrap_content"
141                    android:layout_height="wrap_content"
142                    android:text="@string/imagesAndTextLabel"
143                    android:id="@+id/imagesAndTextLabel"
144                    android:layout_below="@+id/hyperspaceCheckbox"
145                    android:layout_alignLeft="@+id/hyperspaceCheckbox"
146                    android:nextFocusUp="@+id/hyperspaceCheckbox"
147                    android:nextFocusDown="@+id/partlyCloudImage"
148                    />
149
150            <!-- Images should have a contentDescription if they convey any meaningful
151                 information. Images that are purely decorative may not need a contentDescription,
152                 however. -->
153            <ImageView
154                    android:layout_width="wrap_content"
155                    android:layout_height="wrap_content"
156                    android:id="@+id/partlyCloudyImage"
157                    android:layout_below="@+id/imagesAndTextLabel"
158                    android:layout_alignLeft="@+id/imagesAndTextLabel"
159                    android:src="@drawable/partly_cloudy"
160                    android:contentDescription="@string/partlyCloudyDescription"
161                    android:layout_alignRight="@+id/discardButton"
162                    android:nextFocusUp="@+id/imagesAndTextLabel"
163                    android:nextFocusDown="@+id/customViewLabel"
164                    />
165
166            <!-- TextViews are typically self describing, so do not need extra modifications. -->
167            <TextView
168                    android:layout_width="wrap_content"
169                    android:layout_height="wrap_content"
170                    android:textAppearance="?android:attr/textAppearanceLarge"
171                    android:text="@string/temperature"
172                    android:textSize="60sp"
173                    android:id="@+id/temperatureText"
174                    android:layout_alignTop="@+id/partlyCloudyImage"
175                    android:layout_toRightOf="@+id/partlyCloudyImage"
176                    android:layout_alignBottom="@+id/partlyCloudyImage"
177                    android:gravity="center_vertical"
178                    android:nextFocusUp="@+id/imagesAndTextLabel"
179                    android:nextFocusDown="@+id/customViewLabel"
180                    />
181
182            <TextView
183                    android:layout_width="wrap_content"
184                    android:layout_height="wrap_content"
185                    android:text="@string/customViewLabel"
186                    android:id="@+id/customViewLabel"
187                    android:layout_below="@+id/partlyCloudyImage"
188                    android:layout_alignLeft="@+id/partlyCloudyImage"
189                    android:nextFocusUp="@+id/partlyCloudImage"
190                    android:nextFocusDown="@+id/dialView"
191                    />
192
193            <!-- Custom views require additonal code changes. See DialView.java for more
194                 details. -->
195            <com.example.android.basicaccessibility.DialView
196                    android:layout_width="200dp"
197                    android:layout_height="200dp"
198                    android:id="@+id/dialView"
199                    android:layout_below="@+id/customViewLabel"
200                    android:layout_alignLeft="@+id/partlyCloudyImage"
201                    android:nextFocusUp="@+id/customViewLabel"
202                    />
203
204        </RelativeLayout>
205    </ScrollView>
206</LinearLayout>
207