19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyenpackage android.util; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.google.android.collect.Lists; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Activity; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Window; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.Button; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.LinearLayout; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ScrollView; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Utility base class for creating scroll view scenarios, allowing you to add 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a series of different kinds of views arranged vertically, taking up a 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified amount of the screen height. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class ScrollViewScenario extends Activity { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Holds content of scroll view 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private LinearLayout mLinearLayout; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The actual scroll view 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ScrollView mScrollView; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * What we need of each view that the user wants: the view, and the ratio 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the screen height for its desired height. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private interface ViewFactory { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View create(final Context context); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getHeightRatio(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Partially implement ViewFactory given a height ratio. 645435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson * A negative height ratio means that WRAP_CONTENT will be used as height 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static abstract class ViewFactoryBase implements ViewFactory { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mHeightRatio; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings({"UnusedDeclaration"}) 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ViewFactoryBase() {throw new UnsupportedOperationException("don't call this!");} 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ViewFactoryBase(float heightRatio) { 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeightRatio = heightRatio; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getHeightRatio() { 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeightRatio; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Builder for selecting the views to be vertically arranged in the scroll 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view. 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings({"JavaDoc"}) 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Params { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ViewFactory> mViewFactories = Lists.newArrayList(); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 915435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson int mTopPadding = 0; 925435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson int mBottomPadding = 0; 935435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a text view. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text of the text view. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param heightRatio The view's height will be this * the screen height. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params addTextView(final String text, float heightRatio) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mViewFactories.add(new ViewFactoryBase(heightRatio) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View create(final Context context) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final TextView tv = new TextView(context); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tv.setText(text); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return tv; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add multiple text views. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numViews the number of views to add. 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textPrefix The text to prepend to each text view. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param heightRatio The view's height will be this * the screen height. 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params addTextViews(int numViews, String textPrefix, float heightRatio) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numViews; i++) { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTextView(textPrefix + i, heightRatio); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a button. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The text of the button. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param heightRatio The view's height will be this * the screen height. 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params addButton(final String text, float heightRatio) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mViewFactories.add(new ViewFactoryBase(heightRatio) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View create(final Context context) { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Button button = new Button(context); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project button.setText(text); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return button; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add multiple buttons. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numButtons the number of views to add. 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textPrefix The text to prepend to each button. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param heightRatio The view's height will be this * the screen height. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params addButtons(int numButtons, String textPrefix, float heightRatio) { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numButtons; i++) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addButton(textPrefix + i, heightRatio); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add an {@link InternalSelectionView}. 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numRows The number of rows in the internal selection view. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param heightRatio The view's height will be this * the screen height. 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params addInternalSelectionView(final int numRows, float heightRatio) { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mViewFactories.add(new ViewFactoryBase(heightRatio) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View create(final Context context) { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new InternalSelectionView(context, numRows, "isv"); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a sublayout of buttons as a single child of the scroll view. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param numButtons The number of buttons in the sub layout 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param heightRatio The layout's height will be this * the screen height. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Params addVerticalLLOfButtons(final String prefix, final int numButtons, float heightRatio) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mViewFactories.add(new ViewFactoryBase(heightRatio) { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View create(Context context) { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final LinearLayout ll = new LinearLayout(context); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ll.setOrientation(LinearLayout.VERTICAL); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // fill width, equally weighted on height 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final LinearLayout.LayoutParams lp = 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LinearLayout.LayoutParams( 181980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numButtons; i++) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Button button = new Button(context); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project button.setText(prefix + i); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ll.addView(button, lp); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ll; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1935435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson 1945435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson public Params addPaddingToScrollView(int topPadding, int bottomPadding) { 1955435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson mTopPadding = topPadding; 1965435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson mBottomPadding = bottomPadding; 1975435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson 1985435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson return this; 1995435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this and initialized the views in the scroll view. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Used to configure the contents of the scroll view. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected abstract void init(Params params); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LinearLayout getLinearLayout() { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLinearLayout; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScrollView getScrollView() { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mScrollView; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the child contained within the vertical linear layout of the 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * scroll view. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The index within the linear layout. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the child within the vertical linear layout of the scroll view 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * at the specified index. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings({"unchecked"}) 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public <T extends View> T getContentChildAt(int index) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (T) mLinearLayout.getChildAt(index); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Hook for changing how scroll view's are created. 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings({"JavaDoc"}) 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ScrollView createScrollView() { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ScrollView(this); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onCreate(savedInstanceState); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // for test stability, turn off title bar 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int screenHeight = getWindowManager().getDefaultDisplay().getHeight() 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project - 25; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout = new LinearLayout(this); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.setOrientation(LinearLayout.VERTICAL); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // initialize params 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Params params = new Params(); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(params); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // create views specified by params 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (ViewFactory viewFactory : params.mViewFactories) { 2535435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson int height = ViewGroup.LayoutParams.WRAP_CONTENT; 2545435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson if (viewFactory.getHeightRatio() >= 0) { 2555435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson height = (int) (viewFactory.getHeightRatio() * screenHeight); 2565435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( 2585435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson ViewGroup.LayoutParams.MATCH_PARENT, height); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinearLayout.addView(viewFactory.create(this), lp); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScrollView = createScrollView(); 2635435a06010fb50dd8b495df6b7f21f15d82a2c0aMattias Petersson mScrollView.setPadding(0, params.mTopPadding, 0, params.mBottomPadding); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScrollView.addView(mLinearLayout, new ViewGroup.LayoutParams( 265980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT, 266980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy ViewGroup.LayoutParams.MATCH_PARENT)); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // no animation to speed up tests 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScrollView.setSmoothScrollingEnabled(false); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setContentView(mScrollView); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 274