Android ApiDemo 笔记(二)Graphics和View

9 篇文章 0 订阅
4 篇文章 0 订阅

package com.example.android.apis.graphics;

23.TextAlign:

1

设置Path路径,贝赛尔曲线

1:  //设置Path路径
2:      private static void makePath(Path p) {
3:          p.moveTo(10, 0);
4:          p.cubicTo(100, -50, 200, 50, 300, 0);//贝赛尔曲线
5:      }

//mPos存的是字符串中每个字符的位置坐标

 1:  private float[] buildTextPositions(String text, float y, Paint paint) {
 2:          float[] widths = new float[text.length()];
 3:          // initially get the widths for each char
 4:          int n = paint.getTextWidths(text, widths);
 5:          // now popuplate the array, interleaving spaces for the Y values X值为字符的宽
 6:          float[] pos = new float[n * 2];
 7:          float accumulatedX = 0;
 8:          for (int i = 0; i < n; i++) {
 9:              pos[i * 2 + 0] = accumulatedX;
10:              pos[i * 2 + 1] = y;
11:              accumulatedX += widths[i];
12:          }
13:          return pos;
14:      }

onDraw()方法中:

image

1:  p.setColor(0x80FF0000);
2:              canvas.drawLine(x, y, x, y + DY * 3, p);//(x,y)为基准线
3:              p.setColor(Color.BLACK);
4:   
5:              canvas.translate(0, DY);
6:              p.setTextAlign(Paint.Align.LEFT);
7:              canvas.drawText(TEXT_L, x, y, p);//以(x,y)点Paint.Align.LEFT,画

image

1:  p.setColor(0xBB00FF00);
2:      for (int i = 0; i < pos.length / 2; i++) {
3:          canvas.drawLine(pos[i * 2 + 0], pos[i * 2 + 1] - DY, pos[i * 2 + 0],
4:              pos[i * 2 + 1] + DY * 2, p);
5:      }
6:      p.setColor(Color.BLACK);
7:   
8:      p.setTextAlign(Paint.Align.LEFT);
9:      canvas.drawPosText(POSTEXT, pos, p);

image

 1:  canvas.drawPath(mPath, mPathPaint);
 2:              p.setTextAlign(Paint.Align.LEFT);
 3:              canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);
 4:  
 5:              canvas.translate(0, DY * 1.5f);
 6:              canvas.drawPath(mPath, mPathPaint);
 7:              p.setTextAlign(Paint.Align.CENTER);
 8:              canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);
 9:  
10:              canvas.translate(0, DY * 1.5f);
11:              canvas.drawPath(mPath, mPathPaint);
12:              p.setTextAlign(Paint.Align.RIGHT);
13:              canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);

24.Typefaces:

1

获得assets/fonts下的字体

1:  mFace = Typeface.createFromAsset(getContext().getAssets(),
2:              "fonts/samplefont.ttf");

onDraw()方法

1:  @Override
2:          protected void onDraw(Canvas canvas) {
3:              canvas.drawColor(Color.WHITE);
4:   
5:              mPaint.setTypeface(null);
6:              canvas.drawText("Default", 10, 100, mPaint);
7:              mPaint.setTypeface(mFace);
8:              canvas.drawText("Custom", 10, 200, mPaint);
9:          }

25.UnicodeChart:(没看)

1

26.Vertices:(没看) 触摸一下,图片走形

image

27.Xfermodes:

1

圆形画法:

1:  static Bitmap makeDst(int w, int h) {
2:          Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
3:          Canvas c = new Canvas(bm);
4:          Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
5:          p.setColor(0xFFFFCC44);
6:          c.drawOval(new RectF(0, 0, w * 3 / 4, h * 3 / 4), p);
7:          return bm;
8:      }

正方形的画法:

1:  static Bitmap makeSrc(int w, int h) {
2:          Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
3:          Canvas c = new Canvas(bm);
4:          Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
5:   
6:          p.setColor(0xFF66AAFF);
7:          c.drawRect(w / 3, h / 3, w * 19 / 20, h * 19 / 20, p);
8:          return bm;
9:      }

背景马塞克画法:

1:  Bitmap bm = Bitmap.createBitmap(new int[] { 0xFFFFFFFF, 0xFFCCCCCC,
2:                  0xFFCCCCCC, 0xFFFFFFFF }, 2, 2, Bitmap.Config.RGB_565);
3:              mBG = new BitmapShader(bm, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
4:              Matrix m = new Matrix();
5:              m.setScale(6, 6);// 放大6倍
6:              mBG.setLocalMatrix(m);

Xfermode数组:

 1:  private static final Xfermode[] sModes = {
 2:              new PorterDuffXfermode(PorterDuff.Mode.CLEAR),
 3:              new PorterDuffXfermode(PorterDuff.Mode.SRC),
 4:              new PorterDuffXfermode(PorterDuff.Mode.DST),
 5:              new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER),
 6:              new PorterDuffXfermode(PorterDuff.Mode.DST_OVER),
 7:              new PorterDuffXfermode(PorterDuff.Mode.SRC_IN),
 8:              new PorterDuffXfermode(PorterDuff.Mode.DST_IN),
 9:              new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT),
10:              new PorterDuffXfermode(PorterDuff.Mode.DST_OUT),
11:              new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP),
12:              new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP),
13:              new PorterDuffXfermode(PorterDuff.Mode.XOR),
14:              new PorterDuffXfermode(PorterDuff.Mode.DARKEN),
15:              new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN),
16:              new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY),
17:              new PorterDuffXfermode(PorterDuff.Mode.SCREEN) };

onDraw()方法:

 1:  @Override
 2:          protected void onDraw(Canvas canvas) {
 3:              canvas.drawColor(Color.WHITE);
 4:   
 5:              Paint labelP = new Paint(Paint.ANTI_ALIAS_FLAG);
 6:              labelP.setTextAlign(Paint.Align.CENTER);
 7:   
 8:              Paint paint = new Paint();
 9:              paint.setFilterBitmap(false);
10:   
11:              canvas.translate(15, 35);
12:   
13:              int x = 0;
14:              int y = 0;
15:              for (int i = 0; i < sModes.length; i++) {
16:                  // draw the border
17:                  paint.setStyle(Paint.Style.STROKE);
18:                  paint.setShader(null);// Pass null to clear any previous shader
19:                  canvas.drawRect(x - 0.5f, y - 0.5f, x + W + 0.5f, y + H + 0.5f, paint);
20:   
21:                  // draw the checker-board pattern
22:                  paint.setStyle(Paint.Style.FILL);
23:                  paint.setShader(mBG);
24:                  canvas.drawRect(x, y, x + W, y + H, paint);
25:   
26:                  // draw the src/dst example into our offscreen bitmap
27:                  int sc = canvas.saveLayer(x, y, x + W, y + H, null,
28:                      Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG
29:                          | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
30:                          | Canvas.FULL_COLOR_LAYER_SAVE_FLAG
31:                          | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
32:                  // canvas.save();
33:                  canvas.translate(x, y);
34:                  canvas.drawBitmap(mDstB, 0, 0, paint);
35:                  paint.setXfermode(sModes[i]);
36:                  canvas.drawBitmap(mSrcB, 0, 0, paint);
37:                  paint.setXfermode(null);// Pass null to clear any previous xfermode
38:                  canvas.restoreToCount(sc);
39:                  // canvas.restore();
40:  
41:                  // draw the label
42:                  canvas.drawText(sLabels[i], x + W / 2, y - labelP.getTextSize() / 2,
43:                      labelP);
44:   
45:                  x += W + 10;
46:   
47:                  // wrap around when we've drawn enough for one row
48:                  if ((i % ROW_MAX) == ROW_MAX - 1) {
49:                      x = 0;
50:                      y += H + 30;
51:                  }
52:              }
53:          }

注意:上面代码一定要有这两句,改成// canvas.save();都不成,会出现2

1:  int sc = canvas.saveLayer(x, y, x + W, y + H, null,
2:                          Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG
3:                              | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
4:                              | Canvas.FULL_COLOR_LAYER_SAVE_FLAG
5:                              | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
6:                      // canvas.save();
1:  canvas.restoreToCount(sc);
2:                  // canvas.restore();

三.package com.example.android.apis.view;

1.views/Animation/Shake,点Login按钮后EditView会有抖动

image

代码如下:

 1:  public class Animation1 extends Activity implements View.OnClickListener {//设置单击监听,当然也可以直接在setOnClickListener里new
 2:  
 3:      @Override
 4:      public void onCreate(Bundle savedInstanceState) {
 5:          super.onCreate(savedInstanceState);
 6:          setContentView(R.layout.animation_1);
 7:   
 8:          View loginButton = findViewById(R.id.login);
 9:          loginButton.setOnClickListener(this);
10:      }
11:   
12:      public void onClick(View v) {//当loginButton被点击时运行
13:          Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);//Loads an Animation object from a resource
14:          findViewById(R.id.pw).startAnimation(shake);//Start the specified animation now.
15:      }
16:  }

动画文件在res/anim下

shake.xml为

1:  <?xml version="1.0" encoding="utf-8"?>
2:  <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="10" android:duration="1000" android:interpolator="@anim/cycle_7" />

此为translate 类型动画,从“0”移动到“10”,

注意:android:interpolator="@anim/cycle_7"这句为“插入器(窜改者)”

cycle_7.xml如下:

1:  <?xml version="1.0" encoding="utf-8"?>
2:  <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="7" />

 cycle为循环,表示shake的动画在1秒内被循环7次

2.Animation2:最上面是一个ViewFlipper用于4个TextView顺序翻转,最下面是一个Spinner,用于选择翻转方式(4种)

1

先学习下布局:(1个ViewFlipper 下面有4个TextView)

 1:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2:          android:orientation="vertical"
 3:          android:padding="10dip"
 4:          android:layout_width="fill_parent"
 5:          android:layout_height="wrap_content">
 6:  
 7:      <ViewFlipper android:id="@+id/flipper"
 8:          android:layout_width="fill_parent"
 9:          android:layout_height="wrap_content"
10:          android:flipInterval="2000"
11:                  android:layout_marginBottom="20dip" >
12:                  <TextView
13:                          android:layout_width="fill_parent"
14:                          android:layout_height="wrap_content"
15:                          android:gravity="center_horizontal"
16:                          android:textSize="26sp"
17:                          android:text="@string/animation_2_text_1"/>
18:                  <TextView
19:                          android:layout_width="fill_parent"
20:                          android:layout_height="wrap_content"
21:                          android:gravity="center_horizontal"
22:                          android:textSize="26sp"
23:                          android:text="@string/animation_2_text_2"/>
24:                  <TextView
25:                          android:layout_width="fill_parent"
26:                          android:layout_height="wrap_content"
27:                          android:gravity="center_horizontal"
28:                          android:textSize="26sp"
29:                          android:text="@string/animation_2_text_3"/>
30:                  <TextView
31:                          android:layout_width="fill_parent"
32:                          android:layout_height="wrap_content"
33:                          android:gravity="center_horizontal"
34:                          android:textSize="26sp"
35:                          android:text="@string/animation_2_text_4"/>
36:      </ViewFlipper>
37:  
38:      <TextView
39:          android:layout_width="fill_parent"
40:          android:layout_height="wrap_content"
41:          android:layout_marginBottom="5dip"
42:          android:text="@string/animation_2_instructions"
43:      />
44:  
45:      <Spinner android:id="@+id/spinner"
46:          android:layout_width="fill_parent"
47:          android:layout_height="wrap_content"
48:      />

Spinner被选择时,setInAnimation,setOutAnimation为Viewanimator的方法用于设置TextView的入场,出场动画

 1:  public void onItemSelected(AdapterView parent, View v, int position, long id) {
 2:          switch (position) {
 3:   
 4:          case 0:
 5:              mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
 6:                  R.anim.push_up_in));
 7:              mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
 8:                  R.anim.push_up_out));
 9:              break;
10:          case 1:
11:              mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
12:                  R.anim.push_left_in));
13:              mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
14:                  R.anim.push_left_out));
15:              break;
16:          case 2:
17:              mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
18:                  android.R.anim.fade_in));
19:              mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
20:                  android.R.anim.fade_out));
21:              break;
22:          default:
23:              mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
24:                  R.anim.hyperspace_in));
25:              mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
26:                  R.anim.hyperspace_out));
27:              break;
28:          }
29:      }

res/anim/push_up_in.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  <set xmlns:android="http://schemas.android.com/apk/res/android">
3:      <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300"/>
4:      <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
5:  </set>
6:  

res/anim/push_up_out.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  <set xmlns:android="http://schemas.android.com/apk/res/android">
3:      <translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="300"/>
4:      <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
5:  </set>
6:  

res/anim/push_left_in.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  <set xmlns:android="http://schemas.android.com/apk/res/android">
3:      <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
4:      <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
5:  </set>
6:  

res/anim/ hyperspace_in.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  <alpha xmlns:android="http://schemas.android.com/apk/res/android"
3:      android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300"
4:      android:startOffset="1200" />
5:  

res/anim/ hyperspace_out.xml

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <set xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:shareInterpolator="false">
 5:  
 6:      <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
 7:          android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0"
 8:          android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%"
 9:          android:fillAfter="false" android:duration="700" />
10:  
11:  
12:      <set android:interpolator="@android:anim/accelerate_interpolator"
13:          android:startOffset="700">
14:  
15:          <scale android:fromXScale="1.4" android:toXScale="0.0"
16:              android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%"
17:              android:pivotY="50%" android:duration="400" />
18:  
19:          <rotate android:fromDegrees="0" android:toDegrees="-45"
20:              android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%"
21:              android:duration="400" />
22:      </set>
23:  
24:  </set>

以上几个动画可以直接用在ImageView上

3.Animation3:

主要是Interpolator的用法。public void setInterpolator (Interpolator i)Sets the acceleration curve for this animation. Defaults to a linear interpolation(设置动画的加速度效果)

1

首先在第一个TextView中加入动画效果: image
 1:  final View target = findViewById(R.id.target);//TextView
 2:  final View targetParent = (View) target.getParent();//TextView的父view
 3:  
 4:  Animation a = new TranslateAnimation(0.0f, targetParent.getWidth()//设置位移动画
 5:      - target.getWidth() - targetParent.getPaddingLeft()
 6:      - targetParent.getPaddingRight(), 0.0f, 0.0f);
 7:  a.setDuration(1000);//持续1秒
 8:  a.setStartOffset(300);
 9:  a.setRepeatMode(Animation.RESTART);//重复
10:  a.setRepeatCount(Animation.INFINITE);//无限次

android自带的7种Interpolator 效果

 1:  switch (position) {
 2:          case 0:
 3:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
 4:                  android.R.anim.accelerate_interpolator));
 5:              break;
 6:          case 1:
 7:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
 8:                  android.R.anim.decelerate_interpolator));
 9:              break;
10:          case 2:
11:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
12:                  android.R.anim.accelerate_decelerate_interpolator));
13:              break;
14:          case 3:
15:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
16:                  android.R.anim.anticipate_interpolator));
17:              break;
18:          case 4:
19:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
20:                  android.R.anim.overshoot_interpolator));
21:              break;
22:          case 5:
23:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
24:                  android.R.anim.anticipate_overshoot_interpolator));
25:              break;
26:          case 6:
27:              a.setInterpolator(AnimationUtils.loadInterpolator(this,
28:                  android.R.anim.bounce_interpolator));
29:              break;
30:          }
31:   
32:          target.startAnimation(a);

 4. Transition3d:package com.example.android.apis.animation;(没看全)

图片切换3D效果的动画

1

layout为一个FrameLayout里放入一个ListView和一个ImageView ,动画是这两个View的切换效果

5.AutoComplete1

自动完成TextView,主要实现自动提示国家的英文

1

image 这块的layout布局

 1:  <LinearLayout
 2:          android:orientation="horizontal"
 3:          android:layout_width="fill_parent"
 4:          android:layout_height="wrap_content">
 5:  
 6:          <TextView
 7:              android:layout_width="wrap_content"
 8:              android:layout_height="wrap_content"
 9:              android:text="@string/autocomplete_1_country" />
10:  
11:          <AutoCompleteTextView android:id="@+id/edit"
12:              android:layout_width="fill_parent"
13:              android:layout_height="wrap_content"/>
14:  
15:      </LinearLayout>

在AutoCompeteTextView里设置个Adapter

1:  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
2:              android.R.layout.simple_dropdown_item_1line, COUNTRIES);
3:          AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
4:          textView.setAdapter(adapter);

第二行的COUNTRIES为一个数组:

 1:  static final String[] COUNTRIES = new String[] { "Afghanistan", "Albania",
 2:          "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla",
 3:          "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba",
 4:          "Australia", "Austria", "Azerbaijan", "Bahrain", "Bangladesh",
 5:          "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan",
 6:          "Bolivia", "Bosnia and Herzegovina", "Botswana", "Bouvet Island",
 7:          "Brazil", "British Indian Ocean Territory", "British Virgin Islands",
 8:          "Brunei", "Bulgaria", "Burkina Faso", "Burundi", "Cote d'Ivoire",
 9:          "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands",
10:          "Central African Republic", "Chad", "Chile", "China", "Christmas Island",
11:          "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
12:          "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus",
13:          "Czech Republic", "Democratic Republic of the Congo", "Denmark",
14:          "Djibouti", "Dominica", "Dominican Republic", "East Timor", "Ecuador",
15:          "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia",
16:          "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
17:          "Former Yugoslav Republic of Macedonia", "France", "French Guiana",
18:          "French Polynesia", "French Southern Territories", "Gabon", "Georgia",
19:          "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada",
20:          "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana",
21:          "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong",
22:          "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland",
23:          "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya",
24:          "Kiribati", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon",
25:          "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania",
26:          "Luxembourg", "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives",
27:          "Mali", "Malta", "Marshall Islands", "Martinique", "Mauritania",
28:          "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova", "Monaco",
29:          "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
30:          "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia",
31:          "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island",
32:          "North Korea", "Northern Marianas", "Norway", "Oman", "Pakistan",
33:          "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines",
34:          "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
35:          "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe",
36:          "Saint Helena", "Saint Kitts and Nevis", "Saint Lucia",
37:          "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa",
38:          "San Marino", "Saudi Arabia", "Senegal", "Seychelles", "Sierra Leone",
39:          "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia",
40:          "South Africa", "South Georgia and the South Sandwich Islands",
41:          "South Korea", "Spain", "Sri Lanka", "Sudan", "Suriname",
42:          "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syria",
43:          "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
44:          "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago",
45:          "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands",
46:          "Tuvalu", "Virgin Islands", "Uganda", "Ukraine", "United Arab Emirates",
47:          "United Kingdom", "United States",
48:          "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
49:          "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna",
50:          "Western Sahara", "Yemen", "Yugoslavia", "Zambia", "Zimbabwe" };

6.AutoComplete2

1

和AutoComplete1只是布局不一样,注意第5行的android:gravity=”bottom”

 1:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 2:      android:orientation="vertical"
 3:      android:layout_width="fill_parent" 
 4:      android:layout_height="fill_parent"
 5:      android:gravity="bottom">
 6:  
 7:      <Button
 8:          android:layout_width="wrap_content"
 9:          android:layout_height="wrap_content"
10:          android:text="@string/autocomplete_2_focus" />
11:  
12:      <LinearLayout

7.AutoComplete6(没看出和上面的有什么不同的功能)

1

布局要注意:为MutiAutoCompleteTextView

1:  <TextView
2:              android:layout_width="wrap_content"
3:              android:layout_height="wrap_content"
4:              android:text="@string/autocomplete_7_country" />
5:  
6:          <MultiAutoCompleteTextView android:id="@+id/edit"
7:              android:layout_width="fill_parent"
8:              android:layout_height="wrap_content"/>

设置Adapter

1:  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
2:                  android.R.layout.simple_dropdown_item_1line, COUNTRIES);
3:          MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.edit);
4:          textView.setAdapter(adapter);
5:          textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

8.Baseline1:

1

直接加载的layout布局:

 1:  <TextView
 2:          android:layout_width="wrap_content"
 3:          android:layout_height="wrap_content"
 4:          android:layout_marginRight="30dip"
 5:          android:text="@string/baseline_1_label" />
 6:  
 7:      <Button
 8:          android:layout_width="wrap_content"
 9:          android:layout_height="wrap_content"
10:          android:layout_marginRight="30dip"
11:          android:text="@string/baseline_1_button" />

第4行和第10行的

android:layout_marginRight="30dip"

为此TextView右边有30像素的空白

9.Baseline3

1

布局:

注意:第11行的android:layout_gravity="center_vertical"表示在父View的中心

 1:  <LinearLayout
 2:          android:orientation="horizontal"
 3:          android:layout_width="fill_parent"
 4:          android:layout_weight="1.0"
 5:          android:layout_height="0dip">
 6:  
 7:          <TextView
 8:              android:layout_width="wrap_content"
 9:              android:layout_height="wrap_content"
10:              android:layout_marginRight="3dip"
11:              android:layout_gravity="center_vertical"
12:              android:text="@string/baseline_3_label" />
13:  
14:          <Button
15:              android:layout_width="wrap_content"
16:              android:layout_height="wrap_content"
17:              android:layout_marginRight="3dip"
18:              android:layout_gravity="center_vertical"
19:              android:text="@string/baseline_3_button" />
20:  
21:          <TextView
22:              android:layout_width="wrap_content"
23:              android:layout_height="wrap_content"
24:              android:layout_gravity="center_vertical"
25:              android:textSize="20sp"
26:              android:text="@string/baseline_3_bigger" />
27:  
28:      </LinearLayout>

10.Baseline4

1

此布局就是父View的Layout为android:orientation="horizontal"水平布局,然后子view再应用android:layout_gravity="center_vertical"和android:gravity="bottom"

11.Baseline6(没明白效果)

1

布局:

 1:  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2:      android:layout_width="fill_parent"
 3:      android:layout_height="fill_parent">
 4:  
 5:      <EditText android:id="@+id/anchor"
 6:          android:layout_width="fill_parent"
 7:          android:layout_height="fill_parent"
 8:          android:textSize="20sp"
 9:          android:text="@string/baseline_6_multi_line" />
10:  
11:      <TextView
12:          android:layout_width="wrap_content"
13:          android:layout_height="wrap_content"
14:          android:layout_alignBaseline="@id/anchor"
15:          android:layout_alignRight="@id/anchor"
16:          android:text="@string/baseline_6_baseline" />
17:  
18:  </RelativeLayout>

12.Baseline7

1

布局:

注意:TextView android:id="@+id/anchor"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"设置它为父VIEW的左上角

第16行android:layout_alignBaseline="@id/anchor",设置此View在anchor的一条线上

 1:  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2:      android:layout_width="fill_parent"
 3:      android:layout_height="fill_parent">
 4:  
 5:      <TextView android:id="@+id/anchor"
 6:          android:layout_width="wrap_content"
 7:          android:layout_height="wrap_content"
 8:          android:layout_alignParentTop="true"
 9:          android:layout_alignParentLeft="true"
10:          android:textStyle="bold"
11:          android:text="@string/baseline_7_fat" />
12:  
13:      <TextView
14:          android:layout_width="wrap_content"
15:          android:layout_alignParentRight="true"
16:          android:layout_alignBaseline="@id/anchor"
17:          android:layout_height="wrap_content"
18:          android:text="@string/baseline_7_lean" />
19:      
20:  </RelativeLayout>

13.Buttons1:

1

主要是布局:

第二个按钮为小按钮,第14行style="?android:attr/buttonStyleSmall" 

第三个按钮为开关按钮,ToggleButton

 1:  <LinearLayout
 2:          android:layout_width="wrap_content"
 3:          android:layout_height="wrap_content"
 4:          android:orientation="vertical">
 5:          
 6:          <!-- Regular sized buttons -->
 7:          <Button android:id="@+id/button_normal"
 8:              android:text="@string/buttons_1_normal"
 9:              android:layout_width="wrap_content"
10:              android:layout_height="wrap_content" />
11:  
12:          <!-- Small buttons -->
13:          <Button android:id="@+id/button_small"
14:              style="?android:attr/buttonStyleSmall"
15:              android:text="@string/buttons_1_small"
16:              android:layout_width="wrap_content"
17:              android:layout_height="wrap_content" />
18:  
19:          <ToggleButton android:id="@+id/button_toggle"
20:              android:text="@string/buttons_1_toggle"
21:              android:layout_width="wrap_content"
22:              android:layout_height="wrap_content" />
23:              
24:      </LinearLayout>

14.ChronometerDemo 计时器

1

布局:

 1:  <Chronometer android:id="@+id/chronometer"
 2:          android:format="@string/chronometer_initial_format"
 3:          android:layout_width="wrap_content" android:layout_height="wrap_content"
 4:          android:layout_weight="0" android:paddingBottom="30dip"
 5:          android:paddingTop="30dip" />
 6:  
 7:      <Button android:id="@+id/start" android:layout_width="wrap_content"
 8:          android:layout_height="wrap_content" android:text="@string/chronometer_start">
 9:          <requestFocus />
10:      </Button>

对Chronometer控件的操作:

设置监听:

 1:  button = (Button) findViewById(R.id.start);
 2:          button.setOnClickListener(mStartListener);
 3:  
 4:          button = (Button) findViewById(R.id.stop);
 5:          button.setOnClickListener(mStopListener);
 6:  
 7:          button = (Button) findViewById(R.id.reset);
 8:          button.setOnClickListener(mResetListener);
 9:  
10:          button = (Button) findViewById(R.id.set_format);
11:          button.setOnClickListener(mSetFormatListener);
12:  
13:          button = (Button) findViewById(R.id.clear_format);
14:          button.setOnClickListener(mClearFormatListener);

监听事件:

 1:  View.OnClickListener mStartListener = new OnClickListener() {
 2:          public void onClick(View v) {
 3:              mChronometer.start();
 4:          }
 5:      };
 6:  
 7:      View.OnClickListener mStopListener = new OnClickListener() {
 8:          public void onClick(View v) {
 9:              mChronometer.stop();
10:          }
11:      };
12:  
13:      View.OnClickListener mResetListener = new OnClickListener() {
14:          public void onClick(View v) {
15:              mChronometer.setBase(SystemClock.elapsedRealtime());
16:          }
17:      };
18:  
19:      View.OnClickListener mSetFormatListener = new OnClickListener() {
20:          public void onClick(View v) {
21:              mChronometer.setFormat("Formatted time (%s)");
22:          }
23:      };
24:  
25:      View.OnClickListener mClearFormatListener = new OnClickListener() {
26:          public void onClick(View v) {
27:              mChronometer.setFormat(null);
28:          }
29:      };

 15.Controls1:

1

image 此图的布局:

1:  <CheckBox android:id="@+id/star"
2:             style="?android:attr/starStyle"
3:             android:layout_width="wrap_content"
4:             android:layout_height="wrap_content"
5:             android:text="@string/controls_1_star" />

注意这几个布局:image

 1:  <TextView
 2:              android:layout_width="fill_parent"
 3:              android:layout_height="wrap_content"
 4:              android:layout_marginTop="5dip"
 5:              android:text="@string/textColorPrimary"
 6:              android:textAppearance="?android:attr/textAppearanceLarge"
 7:              android:focusable="true"
 8:          />
 9:  
10:          <TextView
11:              android:layout_width="fill_parent"
12:              android:layout_height="wrap_content"
13:              android:layout_marginTop="5dip"
14:              android:text="@string/textColorSecondary"
15:              android:textAppearance="?android:attr/textAppearanceLarge"
16:              android:textColor="?android:attr/textColorSecondary"
17:              android:focusable="true"
18:          />
19:  
20:          <TextView
21:              android:layout_width="fill_parent"
22:              android:layout_height="wrap_content"
23:              android:layout_marginTop="5dip"
24:              android:text="@string/textColorTertiary"
25:              android:textAppearance="?android:attr/textAppearanceLarge"
26:              android:textColor="?android:attr/textColorTertiary"
27:              android:focusable="true"
28:          />
29:  
30:          <TextView
31:              style="?android:attr/listSeparatorTextViewStyle"
32:              android:text="@string/listSeparatorTextViewStyle"
33:              android:layout_marginTop="5dip"
34:          />

 16.CustomView1:

1

此布局用了自定义的View(com.example.android.apis.view.LabelView)

 1:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2:          xmlns:app="http://schemas.android.com/apk/res/com.example.android.apis"
 3:          android:orientation="vertical"
 4:          android:layout_width="fill_parent"
 5:          android:layout_height="wrap_content">
 6:      
 7:      <com.example.android.apis.view.LabelView
 8:              android:background="@drawable/red"
 9:              android:layout_width="fill_parent"
10:              android:layout_height="wrap_content" 
11:              app:text="Red"/>
12:      
13:      <com.example.android.apis.view.LabelView
14:              android:background="@drawable/blue"
15:              android:layout_width="fill_parent"
16:              android:layout_height="wrap_content" 
17:              app:text="Blue" app:textSize="20dp"/>
18:      
19:      <com.example.android.apis.view.LabelView
20:              android:background="@drawable/green"
21:              android:layout_width="fill_parent"
22:              android:layout_height="wrap_content" 
23:              app:text="Green" app:textColor="#ffffffff" />
24:  
25:  </LinearLayout>

17.DateWidgets1 时间控件

1

18.ExpandableList1 (没看)

用到android.widget.ExpandableListAdapter;

1

19.ExpandableList3(没看)

1

20.Focus1

1

1:  WebView webView = (WebView) findViewById(R.id.rssWebView);
2:          webView
3:              .loadData(
4:                  "<html><body>Can I focus?<br /><a href=/"#/">No I cannot!</a>.</body></html>",
5:                  "text/html", "utf-8");

21.Gallery1

长按图片会弹出一个菜单,菜单选项被选后,作调用Toast

1

 1:  public class Gallery1 extends Activity {
 2:   
 3:      @Override
 4:      public void onCreate(Bundle savedInstanceState) {
 5:          super.onCreate(savedInstanceState);
 6:          setContentView(R.layout.gallery_1);
 7:   
 8:          // Reference the Gallery view
 9:          Gallery g = (Gallery) findViewById(R.id.gallery);
10:          // Set the adapter to our custom adapter (below)
11:          g.setAdapter(new ImageAdapter(this));
12:   
13:          // Set a item click listener, and just Toast the clicked position
14:          g.setOnItemClickListener(new OnItemClickListener() {
15:              public void onItemClick(AdapterView parent, View v, int position, long id) {
16:                  Toast.makeText(Gallery1.this, "" + position, Toast.LENGTH_SHORT).show();
17:              }
18:          });
19:   
20:          // We also want to show context menu for longpressed items in the gallery
21:          registerForContextMenu(g);
22:      }
23:   
24:      @Override
25:      public void onCreateContextMenu(ContextMenu menu, View v,
26:          ContextMenuInfo menuInfo) {
27:          menu.add(R.string.gallery_2_text);
28:      }
29:   
30:      @Override
31:      public boolean onContextItemSelected(MenuItem item) {
32:          AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
33:          Toast.makeText(this, "Longpress: " + info.position, Toast.LENGTH_SHORT)
34:              .show();
35:          return true;
36:      }
37:   
38:      public class ImageAdapter extends BaseAdapter {
39:          int mGalleryItemBackground;
40:   
41:          public ImageAdapter(Context c) {
42:              mContext = c;
43:              // See res/values/attrs.xml for the <declare-styleable> that defines
44:              // Gallery1.
45:              TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
46:              mGalleryItemBackground = a.getResourceId(
47:                  R.styleable.Gallery1_android_galleryItemBackground, 0);
48:              a.recycle();
49:          }
50:   
51:          public int getCount() {
52:              return mImageIds.length;
53:          }
54:   
55:          public Object getItem(int position) {
56:              return position;
57:          }
58:   
59:          public long getItemId(int position) {
60:              return position;
61:          }
62:   
63:          public View getView(int position, View convertView, ViewGroup parent) {
64:              ImageView i = new ImageView(mContext);
65:   
66:              i.setImageResource(mImageIds[position]);
67:              i.setScaleType(ImageView.ScaleType.FIT_XY);
68:              i.setLayoutParams(new Gallery.LayoutParams(136, 88));
69:   
70:              // The preferred Gallery item background
71:              i.setBackgroundResource(mGalleryItemBackground);
72:   
73:              return i;
74:          }
75:   
76:          private Context mContext;
77:   
78:          private Integer[] mImageIds = { R.drawable.gallery_photo_1,
79:              R.drawable.gallery_photo_2, R.drawable.gallery_photo_3,
80:              R.drawable.gallery_photo_4, R.drawable.gallery_photo_5,
81:              R.drawable.gallery_photo_6, R.drawable.gallery_photo_7,
82:              R.drawable.gallery_photo_8 };
83:      }
84:   
85:  }

22.Grid1

1

布局:

 1:  <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myGrid"
 2:      android:layout_width="fill_parent" 
 3:      android:layout_height="fill_parent"
 4:      android:padding="10dp"
 5:      android:verticalSpacing="10dp"
 6:      
 7:      android:horizontalSpacing="10dp"
 8:      android:numColumns="auto_fit"
 9:      android:columnWidth="60dp"
10:      android:CMode="columnWidth"
11:      
12:      android:gravity="center"
13:      />

 23.Grid2

1

1:  setContentView(R.layout.grid_2);
2:   
3:         GridView g = (GridView) findViewById(R.id.myGrid);
4:         g.setAdapter(new ImageAdapter(this));

ImageAdapter的getView方法:

 1:  public View getView(int position, View convertView, ViewGroup parent) {
 2:              ImageView imageView;
 3:              if (convertView == null) {
 4:                  imageView = new ImageView(mContext);
 5:                  imageView.setLayoutParams(new GridView.LayoutParams(45, 45));
 6:                  imageView.setAdjustViewBounds(false);
 7:                  imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
 8:                  imageView.setPadding(8, 8, 8, 8);
 9:              } else {
10:                  imageView = (ImageView) convertView;
11:              }
12:   
13:              imageView.setImageResource(mThumbIds[position]);
14:   
15:              return imageView;
16:          }

24.ImageSwitcher1

1

 1:  public class ImageSwitcher1 extends Activity implements
 2:      AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {//实现ViewFactory
 3:  
 4:      @Override
 5:      public void onCreate(Bundle savedInstanceState) {
 6:          super.onCreate(savedInstanceState);
 7:          requestWindowFeature(Window.FEATURE_NO_TITLE);
 8:   
 9:          setContentView(R.layout.image_switcher_1);
10:   
11:          mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
12:          mSwitcher.setFactory(this);//注意
13:          mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
14:              android.R.anim.fade_in));
15:          mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
16:              android.R.anim.fade_out));
17:   
18:          Gallery g = (Gallery) findViewById(R.id.gallery);
19:          g.setAdapter(new ImageAdapter(this));
20:          g.setOnItemSelectedListener(this);
21:      }
22:   
23:      //Gallery被选后设置ImageSwitcher的图片
24:      public void onItemSelected(AdapterView parent, View v, int position, long id) {
25:          mSwitcher.setImageResource(mImageIds[position]);
26:      }
27:   
28:      public void onNothingSelected(AdapterView parent) {
29:      }
30:   
31:      public View makeView() {//!!!!!!注意Creates a new View to be added in a ViewSwitcher.
32:          ImageView i = new ImageView(this);
33:          i.setBackgroundColor(0xFF000000);
34:          i.setScaleType(ImageView.ScaleType.FIT_CENTER);
35:          i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,
36:              LayoutParams.FILL_PARENT));
37:          return i;
38:      }
39:   
40:      private ImageSwitcher mSwitcher;
41:   
42:      public class ImageAdapter extends BaseAdapter {
43:          public ImageAdapter(Context c) {
44:              mContext = c;
45:          }
46:   
47:          public int getCount() {
48:              return mThumbIds.length;
49:          }
50:   
51:          public Object getItem(int position) {
52:              return position;
53:          }
54:   
55:          public long getItemId(int position) {
56:              return position;
57:          }
58:   
59:          public View getView(int position, View convertView, ViewGroup parent) {
60:              ImageView i = new ImageView(mContext);
61:   
62:              i.setImageResource(mThumbIds[position]);
63:              i.setAdjustViewBounds(true);//preserve the aspect ratio 
64:              i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
65:                  LayoutParams.WRAP_CONTENT));
66:              i.setBackgroundResource(R.drawable.picture_frame);
67:              return i;
68:          }
69:   
70:          private Context mContext;
71:   
72:      }
73:   
74:      private Integer[] mThumbIds = { R.drawable.sample_thumb_0,
75:          R.drawable.sample_thumb_1, R.drawable.sample_thumb_2,
76:          R.drawable.sample_thumb_3, R.drawable.sample_thumb_4,
77:          R.drawable.sample_thumb_5, R.drawable.sample_thumb_6,
78:          R.drawable.sample_thumb_7 };
79:   
80:      private Integer[] mImageIds = { R.drawable.sample_0, R.drawable.sample_1,
81:          R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
82:          R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
83:   
84:  }

25.ImageView1:

1

只是布局:

可以看出android:adjustViewBounds="true"为保持比例。

android:maxWidth="50dip" android:maxHeight="50dip"限制图片的最大宽高image

android:maxWidth="70dip" android:maxHeight="70dip"  android:padding="10dip" 限制图片最大宽高并在图片周围填充空白10dipimage

android:padding="10dip" android:layout_width="70dip" android:layout_height="70dip" 图片设置宽高为70,并在图片周围填充空白image

  1:  <?xml version="1.0" encoding="utf-8"?>
  2:  
  3:  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  4:      android:layout_width="fill_parent"
  5:      android:layout_height="fill_parent">
  6:      
  7:      <LinearLayout
  8:          android:layout_width="fill_parent"
  9:          android:layout_height="fill_parent"
 10:          android:orientation="vertical">
 11:          
 12:          <!-- The following four examples use a large image -->
 13:          <!-- 1. Non-scaled view, for reference -->
 14:          <TextView
 15:              android:layout_width="fill_parent"
 16:              android:layout_height="wrap_content"
 17:              android:paddingTop="10dip"
 18:              android:text="@string/image_view_large_normal"/>
 19:          <ImageView
 20:              android:src="@drawable/sample_1"
 21:              android:adjustViewBounds="true"
 22:              android:layout_width="wrap_content"
 23:              android:layout_height="wrap_content" />
 24:              
 25:          <!-- 2. Limit to at most 50x50 -->
 26:          <TextView
 27:              android:layout_width="fill_parent"
 28:              android:layout_height="wrap_content"
 29:              android:paddingTop="10dip"
 30:              android:text="@string/image_view_large_at_most"/>
 31:          <ImageView
 32:              android:src="@drawable/sample_1"
 33:              android:adjustViewBounds="true"
 34:              android:maxWidth="50dip"
 35:              android:maxHeight="50dip"
 36:              android:layout_width="wrap_content"
 37:              android:layout_height="wrap_content" />
 38:  
 39:         <!-- 3. Limit to at most 70x70, with 10 pixels of padding all around -->
 40:          <TextView
 41:              android:layout_width="fill_parent"
 42:              android:layout_height="wrap_content"
 43:              android:paddingTop="10dip"
 44:              android:text="@string/image_view_large_at_most_padded"/>
 45:         <ImageView
 46:              android:src="@drawable/sample_1"
 47:              android:background="#66FFFFFF"
 48:              android:adjustViewBounds="true"
 49:              android:maxWidth="70dip"
 50:              android:maxHeight="70dip"
 51:              android:padding="10dip"
 52:              android:layout_width="wrap_content"
 53:              android:layout_height="wrap_content" />
 54:              
 55:          <!-- 4. Limit to exactly 70x70, with 10 pixels of padding all around -->
 56:          <TextView
 57:              android:layout_width="fill_parent"
 58:              android:layout_height="wrap_content"
 59:              android:paddingTop="10dip"
 60:              android:text="@string/image_view_large_exactly_padded"/>
 61:          <ImageView
 62:              android:src="@drawable/sample_1"
 63:              android:background="#66FFFFFF"
 64:              android:scaleType="centerInside"
 65:              android:padding="10dip"
 66:              android:layout_width="70dip"
 67:              android:layout_height="70dip" />
 68:  
 69:          <!-- Repeating the previous four examples with small image -->
 70:          <!-- 1. Non-scaled view, for reference -->
 71:          <TextView
 72:              android:layout_width="fill_parent"
 73:              android:layout_height="wrap_content"
 74:              android:paddingTop="10dip"
 75:              android:text="@string/image_view_small_normal"/>
 76:          <ImageView
 77:              android:src="@drawable/stat_happy"
 78:              android:background="#FFFFFFFF"
 79:              android:adjustViewBounds="true"
 80:              android:layout_width="wrap_content"
 81:              android:layout_height="wrap_content" />
 82:              
 83:          <!-- 2. Limit to at most 50x50 -->
 84:          <TextView
 85:              android:layout_width="fill_parent"
 86:              android:layout_height="wrap_content"
 87:              android:paddingTop="10dip"
 88:              android:text="@string/image_view_small_at_most"/>
 89:          <ImageView
 90:              android:src="@drawable/stat_happy"
 91:              android:background="#FFFFFFFF"
 92:              android:adjustViewBounds="true"
 93:              android:maxWidth="50dip"
 94:              android:maxHeight="50dip"
 95:              android:layout_width="wrap_content"
 96:              android:layout_height="wrap_content" />
 97:  
 98:         <!-- 3. Limit to at most 70x70, with 10 pixels of padding all around -->
 99:          <TextView
100:              android:layout_width="fill_parent"
101:              android:layout_height="wrap_content"
102:              android:paddingTop="10dip"
103:              android:text="@string/image_view_small_at_most_padded"/>
104:          <ImageView
105:              android:src="@drawable/stat_happy"
106:              android:background="#FFFFFFFF"
107:              android:adjustViewBounds="true"
108:              android:maxWidth="70dip"
109:              android:maxHeight="70dip"
110:              android:padding="10dip"
111:              android:layout_width="wrap_content"
112:              android:layout_height="wrap_content" />
113:              
114:          <!-- 4. Limit to exactly 70x70, with 10 pixels of padding all around -->
115:          <TextView
116:              android:layout_width="fill_parent"
117:              android:layout_height="wrap_content"
118:              android:paddingTop="10dip"
119:              android:text="@string/image_view_small_exactly_padded"/>
120:          <ImageView
121:              android:src="@drawable/stat_happy"
122:              android:background="#FFFFFFFF"
123:              android:scaleType="centerInside"
124:              android:padding="10dip"
125:              android:layout_width="70dip"
126:              android:layout_height="70dip" />
127:  
128:   
129:      </LinearLayout>
130:  </ScrollView>
131:  

26.LayoutAnimation2

此为一个ListActivity在加载时有个加载动画效果

1

注意:第9到24行为设置动画 此例了Alpha+Translate

 1:  public class LayoutAnimation2 extends ListActivity {
 2:      @Override
 3:      public void onCreate(Bundle savedInstanceState) {
 4:          super.onCreate(savedInstanceState);
 5:   
 6:          setListAdapter(new ArrayAdapter<String>(this,
 7:              android.R.layout.simple_list_item_1, mStrings));
 8:   
 9:          AnimationSet set = new AnimationSet(true);
10:   
11:          Animation animation = new AlphaAnimation(0.0f, 1.0f);
12:          animation.setDuration(50);
13:          set.addAnimation(animation);
14:   
15:          animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
16:              Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
17:              Animation.RELATIVE_TO_SELF, 0.0f);
18:          animation.setDuration(100);
19:          set.addAnimation(animation);
20:  
21:          LayoutAnimationController controller = new LayoutAnimationController(set,
22:              0.5f);
23:          ListView listView = getListView();
24:          listView.setLayoutAnimation(controller);
25:      }
26:  
27:      private String[] mStrings = { "Bordeaux", "Lyon", "Marseille", "Nancy",
28:          "Paris", "Toulouse", "Strasbourg" };
29:  }

27.LayoutAnimation3

此为布局动画,在加载整个布局时的动画效果

1

布局XML

第7行说明此ListView加载了一个LayoutAnimation动画layout_bottom_to_top_slide

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <ListView xmlns:android="http://schemas.android.com/apk/res/android"
4:      android:id="@android:id/list"
5:      android:layout_width="fill_parent"
6:      android:layout_height="fill_parent"
7:      android:layoutAnimation="@anim/layout_bottom_to_top_slide" />
8:  

layout_bottom_to_top_slide.xml 声音了一个LayoutAnimation动画如下:

第6行声明了一个animation动画为slide_right

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
4:          android:delay="30%"
5:          android:animationOrder="reverse"
6:          android:animation="@anim/slide_right" />
7:  

slide_right.xml如下

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
4:      <translate android:fromXDelta="-100%p" android:toXDelta="0"
5:              android:duration="@android:integer/config_shortAnimTime" />
6:  </set>

28.LayoutAnimation4随机动态显示

1

布局里有个LayoutAnimation动画 layout_random_fade

 1:  <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/grid"
 2:      android:layoutAnimation="@anim/layout_random_fade"
 3:  
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent"
 6:      android:padding="10dp"
 7:      android:verticalSpacing="10dp"
 8:  
 9:      android:horizontalSpacing="10dp"
10:      android:numColumns="auto_fit"
11:      android:columnWidth="60dp"
12:      android:stretchMode="columnWidth"
13:  
14:      android:gravity="center" />

layout_random_fade.xml动画如下:

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
4:          android:delay="0.5"
5:          android:animationOrder="random"
6:          android:animation="@anim/fade" />

第6行又加载了动画fade

fade.xml如下

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <alpha xmlns:android="http://schemas.android.com/apk/res/android"
4:         android:interpolator="@android:anim/accelerate_interpolator"
5:         android:fromAlpha="0.0" android:toAlpha="1.0"
6:         android:duration="@android:integer/config_longAnimTime" />
7:  

 

29.LayoutAnimation5 以风格顺序方向显示

1 

布局:android:layoutAnimation="@anim/layout_grid_inverse_fade"的LayoutAnimation动画

 1:  <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/grid"
 2:      android:layoutAnimation="@anim/layout_grid_inverse_fade"
 3:  
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent"
 6:      android:padding="10dp"
 7:      android:verticalSpacing="10dp"
 8:  
 9:      android:horizontalSpacing="10dp"
10:      android:numColumns="auto_fit"
11:      android:columnWidth="60dp"
12:      android:stretchMode="columnWidth"
13:  
14:      android:gravity="center" />

layout_grid_inverse_fade.xml动画

注意:此为gridLayoutAnimation ,动画方向:android:direction="right_to_left|bottom_to_top"

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <gridLayoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
4:          android:columnDelay="0.5"
5:          android:directionPriority="row"
6:          android:direction="right_to_left|bottom_to_top"
7:          android:animation="@anim/fade" />
8:  

fade.xml如下

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <alpha xmlns:android="http://schemas.android.com/apk/res/android"
4:         android:interpolator="@android:anim/accelerate_interpolator"
5:         android:fromAlpha="0.0" android:toAlpha="1.0"
6:         android:duration="@android:integer/config_longAnimTime" />
7:  

30.LayoutAnimation6

布局:

注意:第4行的android:layoutAnimation="@anim/layout_wave_scale"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/grid"
 4:      android:layoutAnimation="@anim/layout_wave_scale"
 5:  
 6:      android:layout_width="fill_parent"
 7:      android:layout_height="fill_parent"
 8:      android:verticalSpacing="10dp"
 9:  
10:      android:horizontalSpacing="10dp"
11:      android:numColumns="auto_fit"
12:      android:columnWidth="60dp"
13:      android:stretchMode="columnWidth"
14:  
15:      android:gravity="center" />

layout_wave_scale.xml动画如下:

注意:此为gridLayoutAnimation

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <gridLayoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
4:          android:rowDelay="75%"
5:          android:columnDelay="0%"
6:          android:directionPriority="none"
7:          android:animation="@anim/wave_scale" />
8:  

wave_scale.xml动画如下:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
 4:      <alpha
 5:          android:fromAlpha="0.0"
 6:          android:toAlpha="1.0"
 7:          android:duration="100" />
 8:      <scale
 9:          android:fromXScale="0.5" android:toXScale="1.5"
10:          android:fromYScale="0.5" android:toYScale="1.5"
11:          android:pivotX="50%" android:pivotY="50%"
12:          android:duration="200" />
13:      <scale 
14:          android:fromXScale="1.5" android:toXScale="1.0"
15:          android:fromYScale="1.5" android:toYScale="1.0"
16:          android:pivotX="50%" android:pivotY="50%"
17:          android:startOffset="200"
18:          android:duration="100" />
19:  </set>

31.LayoutAnimation7

布局:

注意:TableLayout中加入了多个TableRow 每个TableRow里有一个TextView和一个EditView,每个TableRow里有分别有一个动画

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layoutAnimation="@anim/layout_animation_table"
 5:      android:animationCache="false"
 6:      android:clipToPadding="false"
 7:      android:padding="12dp"
 8:      android:layout_width="fill_parent"
 9:      android:layout_height="fill_parent"
10:      android:stretchColumns="1">
11:  
12:      <TableRow
13:          android:layoutAnimation="@anim/layout_animation_row_right_slide">
14:          <TextView
15:              android:gravity="right"
16:              android:text="@string/layout_animation_name" />
17:          <EditText />
18:      </TableRow>
19:  
20:      <TableRow
21:          android:layoutAnimation="@anim/layout_animation_row_left_slide">
22:          <TextView
23:              android:gravity="right"
24:              android:text="@string/layout_animation_lastname" />
25:          <EditText />
26:      </TableRow>
27:  
28:      <TableRow
29:          android:layoutAnimation="@anim/layout_animation_row_right_slide">
30:          <TextView
31:              android:gravity="right"
32:              android:text="@string/layout_animation_phone" />
33:          <EditText />
34:      </TableRow>
35:  
36:      <TableRow
37:          android:layoutAnimation="@anim/layout_animation_row_left_slide">
38:          <TextView
39:              android:gravity="right"
40:              android:text="@string/layout_animation_address" />
41:          <EditText android:lines="3" />
42:      </TableRow>
43:  </TableLayout>
44:  

第41行<EditText android:lines="3" />image

动画layout_animation_row_left_slide.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
4:          android:delay="10%"
5:          android:animation="@anim/slide_left" />
6:  

第6行 slide_left动画:

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
4:      <translate android:fromXDelta="100%p" android:toXDelta="0"
5:          android:duration="@android:integer/config_shortAnimTime" />
6:  </set>

动画layout_animation_row_right_slide.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
4:          android:delay="10%"
5:          android:animationOrder="reverse"
6:          android:animation="@anim/slide_right" />
7:  

  第6行 slide_right动画:

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
4:      <translate android:fromXDelta="-100%p" android:toXDelta="0"
5:              android:duration="@android:integer/config_shortAnimTime" />
6:  </set>
7:  

32.LinearLayout3

1

布局:

注意:第三个TextView android:layout_weight="1",activity根据这个View的比0大的layout_weight值来划分剩余的空间和其它Views定义的layout_weight也按比例进行空间的划分

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!--
 4:      Demonstrates a simple linear layout. The layout fills the screen, with the
 5:      children stacked from the top. The middle child gets allocated any extra
 6:      space.
 7:  -->
 8:  
 9:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
10:      android:orientation="vertical"
11:      android:background="@drawable/blue"
12:      android:layout_width="fill_parent"
13:      android:layout_height="fill_parent">
14:  
15:      <!-- view1 goes on top -->
16:      <TextView
17:          android:background="@drawable/box"
18:          android:layout_width="fill_parent"
19:          android:layout_height="wrap_content"
20:          android:text="@string/linear_layout_3_top"/>
21:  
22:      <!-- view2 goes in the middle -->
23:      <TextView
24:          android:background="@drawable/box"
25:          android:layout_width="fill_parent"
26:          android:layout_height="wrap_content"
27:          android:layout_weight="1"
28:          android:text="@string/linear_layout_3_middle"/>
29:  
30:      <!-- view3 goes on the bottom -->
31:      <TextView
32:          android:background="@drawable/box"
33:          android:layout_width="fill_parent"
34:          android:layout_height="wrap_content"
35:          android:text="@string/linear_layout_3_bottom"/>
36:  
37:  </LinearLayout>
38:  

33.LinearLayout4

1

布局:

注意:每个TextView的android:layout_weight="1" android:layout_height="fill_parent"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!--
 4:      Demonstrates a horizontal linear layout with equally sized columns
 5:  -->
 6:  
 7:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 8:      android:orientation="horizontal"
 9:      android:layout_width="fill_parent"
10:      android:layout_height="fill_parent">
11:  
12:      <TextView
13:          android:background="@drawable/red"
14:          android:layout_width="0dip"
15:          android:layout_height="fill_parent"
16:          android:layout_weight="1"/>
17:  
18:      <TextView
19:          android:background="@drawable/green"
20:          android:layout_width="0dip"
21:          android:layout_height="fill_parent"
22:          android:layout_weight="1"/>
23:  
24:      <TextView
25:          android:background="@drawable/blue"
26:          android:layout_width="0dip"
27:          android:layout_height="fill_parent"
28:          android:layout_weight="1"/>
29:  
30:      <TextView
31:          android:background="@drawable/yellow"
32:          android:layout_width="0dip"
33:          android:layout_height="fill_parent"
34:          android:layout_weight="1"/>
35:  
36:  </LinearLayout>
37:  

34.LinearLayout5

1

布局:

注意:第33行android:background="@android:drawable/editbox_background" 设置了EditView的背景样子

第43行又加了一个LinearLayout放两个按钮,第47行android:layout_gravity="right" 设置两按钮右边对齐

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!--
 4:      Demonstrates a nesting layouts to make a form
 5:  -->
 6:  
 7:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 8:      android:orientation="vertical"
 9:      android:background="@drawable/blue"
10:      android:layout_width="fill_parent"
11:      android:layout_height="wrap_content"
12:      android:padding="10dip">
13:  
14:      <!--
15:          TextView goes on top...
16:      -->
17:      <TextView
18:          android:layout_width="fill_parent"
19:          android:layout_height="wrap_content"
20:          android:text="@string/linear_layout_5_instructions"/>
21:  
22:      <!--
23:          Followed by the EditText field...
24:  
25:          Also give it a standard background (the "android:"
26:          part in @android:drawable/editbox_background
27:          means it is system resource rather than
28:          an application resource.
29:      -->
30:      <EditText
31:          android:layout_width="fill_parent"
32:          android:layout_height="wrap_content"
33:          android:background="@android:drawable/editbox_background"/>
34:  
35:      <!--
36:          Use a horizontal layout to hold the two buttons.
37:          This item has layout_gravity="right". This means the whole
38:          horizontal LinearLayout is right aligned, not the individual
39:          items within it. The horizontal LinearLayout's width is set to
40:          wrap_content. (If it was fill_parent it would not have any
41:          room to slide to the right.)
42:      -->
43:      <LinearLayout
44:          android:orientation="horizontal"
45:          android:layout_width="wrap_content"
46:          android:layout_height="wrap_content"
47:          android:layout_gravity="right" >
48:  
49:          <Button
50:              android:layout_width="wrap_content"
51:              android:layout_height="wrap_content"
52:              android:text="@string/linear_layout_5_cancel"/>
53:  
54:          <Button
55:              android:layout_width="wrap_content"
56:              android:layout_height="wrap_content"
57:              android:layout_marginLeft="10dip"
58:              android:text="@string/linear_layout_5_ok" />
59:  
60:      </LinearLayout>
61:  
62:  </LinearLayout>

35.LinearLayout6

1

此例子在LinearLayout 布局中加入了android:padding="20dip"  android:layout_width="wrap_content" android:layout_height="wrap_content"

布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!--
 4:      LinearLayout which uses a combination of wrap_content on itself and
 5:      fill_parent on its children to get every item to be the same width.
 6:  -->
 7:  
 8:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 9:      android:orientation="vertical"
10:      android:background="@drawable/blue"
11:      android:padding="20dip"
12:      android:layout_width="wrap_content"
13:      android:layout_height="wrap_content">
14:  
15:      <TextView
16:          android:background="@drawable/box"
17:          android:layout_width="fill_parent"
18:          android:layout_height="wrap_content"
19:          android:text="@string/linear_layout_6_one"/>
20:  
21:      <TextView
22:          android:background="@drawable/box"
23:          android:layout_width="fill_parent"
24:          android:layout_height="wrap_content"
25:          android:text="@string/linear_layout_6_two"/>
26:  
27:      <TextView
28:          android:background="@drawable/box"
29:          android:layout_width="fill_parent"
30:          android:layout_height="wrap_content"
31:          android:text="@string/linear_layout_6_three"/>
32:  
33:      <TextView
34:          android:background="@drawable/box"
35:          android:layout_width="fill_parent"
36:          android:layout_height="wrap_content"
37:          android:text="@string/linear_layout_6_four"/>
38:  
39:  </LinearLayout>

36.LinearLayout7

1

布局:

注意:主要起作用的是第8行android:layout_width="fill_parent"和第15行android:layout_weight="1"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  <!--
 3:      Demonstrates a horizontal linear layout with equally sized columns.
 4:      Some columns force their height to match the parent.
 5:  -->
 6:  
 7:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal"
 8:      android:layout_width="fill_parent"
 9:      android:layout_height="wrap_content">
10:  
11:      <TextView
12:          android:background="@drawable/red"
13:          android:layout_width="0dip"
14:          android:layout_height="fill_parent"
15:          android:layout_weight="1"
16:          android:text="@string/linear_layout_7_small"/>
17:  
18:      <TextView
19:          android:background="@drawable/green"
20:          android:layout_width="0dip"
21:          android:layout_height="fill_parent"
22:          android:layout_weight="1"
23:          android:text="@string/linear_layout_7_big"/>
24:  
25:      <TextView
26:          android:background="@drawable/blue"
27:          android:layout_width="0dip"
28:          android:layout_height="fill_parent"
29:          android:layout_weight="1"
30:          android:text="@string/linear_layout_7_small" />
31:  
32:      <TextView
33:          android:background="@drawable/yellow"
34:          android:layout_width="0dip"
35:          android:layout_height="wrap_content"
36:          android:layout_weight="1"
37:          android:text="@string/linear_layout_7_wrap"/>
38:  
39:  </LinearLayout>

37.LinearLayout8

在菜单里可以动态改变LinearLayout的布局

1

原布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!--
 4:      Demonstrates a simple linear layout. The layout fills the screen, with the
 5:      children stacked from the top.
 6:      -->
 7:  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 8:      android:layout_width="fill_parent"
 9:      android:layout_height="fill_parent"
10:      android:padding="30dip">
11:    <LinearLayout
12:        android:id="@+id/layout"
13:        android:orientation="vertical"
14:        android:background="@drawable/blue"
15:        android:layout_width="fill_parent"
16:        android:layout_height="fill_parent"
17:        android:padding="30dip">
18:  
19:      <TextView
20:      android:background="@drawable/box"
21:      android:layout_width="wrap_content"
22:      android:layout_height="wrap_content"
23:      android:text="@string/linear_layout_8_c"/>
24:  
25:      <TextView
26:      android:background="@drawable/box"
27:      android:layout_width="wrap_content"
28:      android:layout_height="wrap_content"
29:      android:text="@string/linear_layout_8_b"/>
30:  
31:      <TextView
32:      android:background="@drawable/box"
33:      android:layout_width="wrap_content"
34:      android:layout_height="wrap_content"
35:      android:text="@string/linear_layout_8_c"/>
36:  
37:    </LinearLayout>
38:  
39:  </FrameLayout>
40:  

菜单的onOptionsItemSelected方法:

 1:  @Override
 2:      public boolean onOptionsItemSelected(MenuItem item) {
 3:          switch (item.getItemId()) {
 4:   
 5:          case VERTICAL_ID:
 6:              mLinearLayout.setOrientation(LinearLayout.VERTICAL);
 7:              return true;
 8:          case HORIZONTAL_ID:
 9:              mLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
10:              return true;
11:   
12:          case TOP_ID:
13:              mLinearLayout.setVerticalGravity(Gravity.TOP);
14:              return true;
15:          case MIDDLE_ID:
16:              mLinearLayout.setVerticalGravity(Gravity.CENTER_VERTICAL);
17:              return true;
18:          case BOTTOM_ID:
19:              mLinearLayout.setVerticalGravity(Gravity.BOTTOM);
20:              return true;
21:   
22:          case LEFT_ID:
23:              mLinearLayout.setHorizontalGravity(Gravity.LEFT);
24:              return true;
25:          case CENTER_ID:
26:              mLinearLayout.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
27:              return true;
28:          case RIGHT_ID:
29:              mLinearLayout.setHorizontalGravity(Gravity.RIGHT);
30:              return true;
31:   
32:          }
33:          return super.onOptionsItemSelected(item);
34:      }

38.LinearLayout9 下面的Button一直在屏幕的底部

1

布局:

Button一直在屏幕的底部主要是因为第16行的android:layout_weight="1.0"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!--
 4:      Demonstrates a simple linear layout. The layout fills the screen, with the
 5:      children stacked from the top.
 6:      -->
 7:  
 8:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 9:      android:orientation="vertical"
10:      android:layout_width="fill_parent"
11:      android:layout_height="fill_parent">
12:  
13:      <ListView android:id="@+id/list"
14:          android:layout_width="fill_parent"
15:          android:layout_height="wrap_content"
16:          android:layout_weight="1.0" />
17:  
18:      <Button
19:          android:layout_width="fill_parent"
20:          android:layout_height="wrap_content"
21:          android:text="@string/linear_layout_9_button" />
22:  
23:  </LinearLayout>

39.LinearLayout10

1

第一个条的布局:

 1:  <LinearLayout
 2:          android:layout_width="fill_parent"
 3:          android:layout_height="wrap_content"
 4:          android:addStatesFromChildren="true"
 5:          android:gravity="center_vertical"
 6:          android:paddingRight="0dip"
 7:          android:background="@android:drawable/edit_text">
 8:  
 9:          <!--
10:              TextView label goes at the left.
11:          -->
12:          <TextView
13:              android:layout_width="wrap_content"
14:              android:layout_height="wrap_content"
15:              android:text="@string/linear_layout_10_from"
16:              android:textColor="?android:attr/textColorSecondary"
17:              android:textAppearance="?android:attr/textAppearanceLargeInverse"
18:          />
19:  
20:          <!--
21:              EditText goes in between.
22:          -->
23:          <EditText
24:              android:layout_width="wrap_content"
25:              android:layout_height="wrap_content"
26:              android:layout_weight="1"
27:              android:singleLine="true"
28:              android:background="@null"
29:          />
30:  
31:          <!--
32:              The button goes at the right.
33:          -->
34:          <ImageButton
35:              style="@android:style/Widget.Button.Inset"
36:              android:src="@android:drawable/star_big_on"
37:              android:layout_width="wrap_content"
38:              android:layout_height="wrap_content"
39:              android:layout_marginTop="2dip"
40:              android:layout_marginRight="2dip"
41:              android:layout_marginBottom="2dip"
42:              android:padding="10dip"
43:          />
44:  
45:      </LinearLayout>

40.RelativeLayout1 相对布局

1

布局:

注意:第18行android:layout_alignParentTop="true"

第27行android:layout_alignParentBottom="true"

第36,37行android:layout_above="@id/view2"  android:layout_below="@id/view1"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  
 4:  <!--
 5:      Demonstrates stretching a view to fill the space between two other views
 6:  -->
 7:  
 8:  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 9:      android:layout_width="fill_parent"
10:      android:layout_height="fill_parent">
11:  
12:      <!-- view1 goes on top -->
13:      <TextView
14:          android:id="@+id/view1"
15:          android:background="@drawable/red"
16:          android:layout_width="fill_parent"
17:          android:layout_height="wrap_content"
18:          android:layout_alignParentTop="true"
19:          android:text="@string/relative_layout_1_top"/>
20:  
21:      <!-- view2 goes on the bottom -->
22:      <TextView
23:          android:id="@+id/view2"
24:          android:background="@drawable/green"
25:          android:layout_width="fill_parent"
26:          android:layout_height="wrap_content"
27:          android:layout_alignParentBottom="true"
28:          android:text="@string/relative_layout_1_bottom"/>
29:  
30:      <!-- view3 stretches betweeen view1 and view2 -->
31:      <TextView
32:          android:id="@+id/view3"
33:          android:background="@drawable/yellow"
34:          android:layout_width="fill_parent"
35:          android:layout_height="0dip"
36:          android:layout_above="@id/view2"
37:          android:layout_below="@id/view1"
38:          android:text="@string/relative_layout_1_center"/>
39:  
40:  </RelativeLayout>

41.ScrollView2   一共64个TextView和button

1

布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  
 4:  <!-- Demonstrates scrolling with a ScrollView. -->
 5:  
 6:  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 7:      android:layout_width="fill_parent"
 8:      android:layout_height="wrap_content"
 9:      android:scrollbars="none">
10:  
11:      <LinearLayout
12:          android:id="@+id/layout"
13:          android:orientation="vertical"
14:          android:layout_width="fill_parent"
15:          android:layout_height="wrap_content">
16:  
17:          <TextView
18:              android:layout_width="fill_parent"
19:              android:layout_height="wrap_content"
20:              android:text="@string/scroll_view_2_text_1"/>
21:  
22:          <Button
23:              android:layout_width="fill_parent"
24:              android:layout_height="wrap_content"
25:              android:text="@string/scroll_view_2_button_1"/>
26:  
27:      </LinearLayout>
28:  </ScrollView>

在OnCreat()里动态填加 View

 1:  protected void onCreate(Bundle savedInstanceState) {
 2:          super.onCreate(savedInstanceState);
 3:          setContentView(R.layout.scroll_view_2);
 4:   
 5:          LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
 6:          for (int i = 2; i < 64; i++) {
 7:              TextView textView = new TextView(this);
 8:              textView.setText("Text View " + i);
 9:              LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
10:                      LinearLayout.LayoutParams.FILL_PARENT,
11:                      LinearLayout.LayoutParams.WRAP_CONTENT
12:              );
13:              layout.addView(textView, p);
14:   
15:              Button buttonView = new Button(this);
16:              buttonView.setText("Button " + i);
17:              layout.addView(buttonView, p);
18:          }
19:      }

42.TableLayout1

TableLayout里由<TableRow><TableRow/>组成

1

布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent">
 6:  
 7:      <TableRow>
 8:          <TextView
 9:            android:text="@string/table_layout_1_star"
10:              android:padding="3dip" />
11:          <TextView
12:              android:text="@string/table_layout_1_open"
13:              android:padding="3dip" />
14:          <TextView
15:              android:text="@string/table_layout_1_open_shortcut"
16:              android:padding="3dip" />
17:      </TableRow>
18:  
19:      <TableRow>
20:          <TextView
21:              android:text="@string/table_layout_1_triple_star"
22:              android:padding="3dip" />
23:          <TextView
24:              android:text="@string/table_layout_1_save"
25:              android:padding="3dip" />
26:          <TextView
27:              android:text="@string/table_layout_1_save_shortcut"
28:              android:padding="3dip" />
29:      </TableRow>
30:  
31:      <TableRow>
32:          <TextView
33:              android:text="@string/table_layout_1_star"
34:              android:padding="3dip" />
35:          <TextView
36:              android:text="@string/table_layout_1_quit"
37:              android:padding="3dip" />
38:          <TextView
39:              android:text="@string/table_layout_1_quit_shortcut"
40:              android:padding="3dip" />
41:      </TableRow>
42:  </TableLayout>
43:  

43.TableLayout2

1

布局:在空的地方不加控件

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent">
 6:  
 7:      <TableRow>
 8:          <Button
 9:              android:text="@string/table_layout_2_open" />
10:          <TextView
11:              android:text="@string/table_layout_2_path_1"
12:              android:padding="3dip" />
13:      </TableRow>
14:      <TableRow>
15:          <Button
16:              android:text="@string/table_layout_2_save_all"/>
17:      </TableRow>
18:      <TableRow>
19:          <Button
20:              android:text="@string/table_layout_2_save"
21:              android:visibility="invisible" />
22:          <TextView
23:              android:text="@string/table_layout_2_path_2"
24:              android:padding="3dip" />
25:      </TableRow>
26:  </TableLayout>
27:  

44.TableLayout4此表格布局一行中的两个TextView分布在左右两端

1

布局:

注意:关键在第7行和第15行,android:stretchColumns="1" android:gravity="right"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!-- Stretch some columns -->
 4:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="fill_parent"
 7:      android:stretchColumns="1">
 8:  
 9:      <TableRow>
10:          <TextView
11:              android:text="@string/table_layout_4_open"
12:              android:padding="3dip" />
13:          <TextView
14:              android:text="@string/table_layout_4_open_shortcut"
15:              android:gravity="right"
16:              android:padding="3dip" />
17:      </TableRow>
18:  
19:      <TableRow>
20:          <TextView
21:              android:text="@string/table_layout_4_save"
22:              android:padding="3dip" />
23:          <TextView
24:              android:text="@string/table_layout_4_save_shortcut"
25:              android:gravity="right"
26:              android:padding="3dip" />
27:      </TableRow>
28:  </TableLayout>
29:  

45.TableLayout5

1

布局:

注意:第7行和第15行

还有横线的画法:

39:      <View
40:          android:layout_height="2dip"
41:          android:background="#FF909090" />
 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!-- Stretch some columns -->
 4:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="fill_parent"
 7:      android:stretchColumns="1">
 8:  
 9:      <TableRow>
10:          <TextView
11:              android:text="@string/table_layout_5_open"
12:              android:padding="3dip" />
13:          <TextView
14:              android:text="@string/table_layout_5_open_shortcut"
15:              android:gravity="right"
16:              android:padding="3dip" />
17:      </TableRow>
18:  
19:      <TableRow>
20:          <TextView
21:              android:text="@string/table_layout_5_save"
22:              android:padding="3dip" />
23:          <TextView
24:              android:text="@string/table_layout_5_save_shortcut"
25:              android:gravity="right"
26:              android:padding="3dip" />
27:      </TableRow>
28:  
29:      <TableRow>
30:          <TextView
31:              android:text="@string/table_layout_5_save_as"
32:              android:padding="3dip" />
33:          <TextView
34:              android:text="@string/table_layout_5_save_as_shortcut"
35:              android:gravity="right"
36:              android:padding="3dip" />
37:      </TableRow>
38:  
39:      <View
40:          android:layout_height="2dip"
41:          android:background="#FF909090" />
42:  
43:      <TableRow>
44:          <TextView
45:              android:text="@string/table_layout_5_import"
46:              android:padding="3dip" />
47:      </TableRow>
48:  
49:      <TableRow>
50:          <TextView
51:              android:text="@string/table_layout_5_export"
52:              android:padding="3dip" />
53:          <TextView
54:              android:text="@string/table_layout_5_export_shortcut"
55:              android:gravity="right"
56:              android:padding="3dip" />
57:      </TableRow>
58:  
59:      <View
60:          android:layout_height="2dip"
61:          android:background="#FF909090" />
62:  
63:      <TableRow>
64:          <TextView
65:              android:text="@string/table_layout_5_quit"
66:              android:padding="3dip" />
67:      </TableRow>
68:  </TableLayout>
69:  

46.TableLayout6

1

布局:

注意:第12行的12: android:layout_column="1" 声明它在表格的第1列

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  
 4:  <!-- Stretch some columns -->
 5:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 6:      android:layout_width="fill_parent"
 7:      android:layout_height="fill_parent"
 8:      android:stretchColumns="1">
 9:  
10:      <TableRow>
11:          <TextView
12:              android:layout_column="1"
13:              android:text="@string/table_layout_6_open"
14:              android:padding="3dip" />
15:          <TextView
16:              android:text="@string/table_layout_6_open_shortcut"
17:              android:gravity="right"
18:              android:padding="3dip" />
19:      </TableRow>
20:  
21:      <TableRow>
22:          <TextView
23:              android:layout_column="1"
24:              android:text="@string/table_layout_6_save"
25:              android:padding="3dip" />
26:          <TextView
27:              android:text="@string/table_layout_6_save_shortcut"
28:              android:gravity="right"
29:              android:padding="3dip" />
30:      </TableRow>
31:  
32:      <TableRow>
33:          <TextView
34:              android:layout_column="1"
35:              android:text="@string/table_layout_6_save_as"
36:              android:padding="3dip" />
37:          <TextView
38:              android:text="@string/table_layout_6_save_as_shortcut"
39:              android:gravity="right"
40:              android:padding="3dip" />
41:      </TableRow>
42:  
43:      <View
44:          android:layout_height="2dip"
45:          android:background="#FF909090" />
46:  
47:      <TableRow>
48:          <TextView
49:              android:text="@string/table_layout_6_x"
50:              android:padding="3dip" />
51:          <TextView
52:              android:text="@string/table_layout_6_import"
53:              android:padding="3dip" />
54:      </TableRow>
55:  
56:      <TableRow>
57:          <TextView
58:              android:text="@string/table_layout_6_x"
59:              android:padding="3dip" />
60:          <TextView
61:              android:text="@string/table_layout_6_export"
62:              android:padding="3dip" />
63:          <TextView
64:              android:text="@string/table_layout_6_export_shortcut"
65:              android:gravity="right"
66:              android:padding="3dip" />
67:      </TableRow>
68:  
69:      <View
70:          android:layout_height="2dip"
71:          android:background="#FF909090" />
72:  
73:      <TableRow>
74:          <TextView
75:              android:layout_column="1"
76:              android:text="@string/table_layout_6_quit"
77:              android:padding="3dip" />
78:      </TableRow>
79:  </TableLayout>
80:  

47.TableLayout7 下面的按钮可以隐藏表格的某行

1

布局:

注意:第12行android:collapseColumns="2" 表明隐藏第2列

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:orientation="vertical"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="fill_parent">
 7:      <TableLayout
 8:          android:id="@+id/menu"
 9:          android:layout_width="fill_parent"
10:          android:layout_height="wrap_content"
11:          android:stretchColumns="1"
12:          android:collapseColumns="2">
13:  
14:          <TableRow>
15:              <TextView
16:                  android:layout_column="1"
17:                  android:text="@string/table_layout_7_open"
18:                  android:padding="3dip" />
19:              <TextView
20:                  android:text="@string/table_layout_7_open_shortcut"
21:                  android:gravity="right"
22:                  android:padding="3dip" />
23:          </TableRow>
24:  
25:          <TableRow>
26:              <TextView
27:                  android:layout_column="1"
28:                  android:text="@string/table_layout_7_save"
29:                  android:padding="3dip" />
30:              <TextView
31:                  android:text="@string/table_layout_7_save_shortcut"
32:                  android:gravity="right"
33:                  android:padding="3dip" />
34:          </TableRow>
35:  
36:          <TableRow>
37:              <TextView
38:                  android:layout_column="1"
39:                  android:text="@string/table_layout_7_save_as"
40:                  android:padding="3dip" />
41:              <TextView
42:                  android:text="@string/table_layout_7_save_as_shortcut"
43:                  android:gravity="right"
44:                  android:padding="3dip" />
45:          </TableRow>
46:  
47:          <View
48:              android:layout_height="2dip"
49:              android:background="#FF909090" />
50:  
51:          <TableRow>
52:              <TextView
53:                  android:text="@string/table_layout_7_x"
54:                  android:padding="3dip" />
55:              <TextView
56:                  android:text="@string/table_layout_7_import"
57:                  android:padding="3dip" />
58:          </TableRow>
59:  
60:          <TableRow>
61:              <TextView
62:                  android:text="@string/table_layout_7_x"
63:                  android:padding="3dip" />
64:              <TextView
65:                  android:text="@string/table_layout_7_export"
66:                  android:padding="3dip" />
67:              <TextView
68:                  android:text="@string/table_layout_7_export_shortcut"
69:                  android:gravity="right"
70:                  android:padding="3dip" />
71:          </TableRow>
72:  
73:          <View
74:              android:layout_height="2dip"
75:              android:background="#FF909090" />
76:      </TableLayout>
77:  
78:      <LinearLayout
79:          android:layout_width="wrap_content"
80:          android:layout_height="wrap_content">
81:          <Button
82:              android:id="@+id/toggle2"
83:              android:layout_width="wrap_content"
84:              android:layout_height="wrap_content"
85:              android:text="@string/table_layout_7_toggle_checkmarks" />
86:          <Button
87:              android:id="@+id/toggle1"
88:              android:layout_width="wrap_content"
89:              android:layout_height="wrap_content"
90:              android:text="@string/table_layout_7_toggle_shortcuts" />
91:      </LinearLayout>
92:  </LinearLayout>
93:  

两个按钮事件:

 1:  final TableLayout table = (TableLayout) findViewById(R.id.menu);
 2:      Button button = (Button) findViewById(R.id.toggle1);
 3:      button.setOnClickListener(new Button.OnClickListener() {
 4:          public void onClick(View v) {
 5:              mShortcutsCollapsed = !mShortcutsCollapsed;
 6:              table.setColumnCollapsed(2, mShortcutsCollapsed);
 7:          }
 8:      });
 9:      button = (Button) findViewById(R.id.toggle2);
10:      button.setOnClickListener(new Button.OnClickListener() {
11:          public void onClick(View v) {
12:              mCheckmarksCollapsed = !mCheckmarksCollapsed;
13:              table.setColumnCollapsed(0, mCheckmarksCollapsed);
14:          }
15:      });

48.TableLayout8  按钮可以设置Stretch

1

按钮事件:

1:  final TableLayout table = (TableLayout) findViewById(R.id.menu);
2:  Button button = (Button) findViewById(R.id.toggle);
3:  button.setOnClickListener(new Button.OnClickListener() {
4:      public void onClick(View v) {
5:          mStretch = !mStretch;
6:          table.setColumnStretchable(1, mStretch);
7:      }
8:  });

49.TableLayout9

1 1

按钮事件:

1:  final TableLayout table = (TableLayout) findViewById(R.id.menu);
2:          Button button = (Button) findViewById(R.id.toggle);
3:          button.setOnClickListener(new Button.OnClickListener() {
4:              public void onClick(View v) {
5:                  mShrink = !mShrink;
6:                  table.setColumnShrinkable(0, mShrink);
7:              }
8:          });

setColumnShrinkable的解释:

Makes the given column shrinkable or not. When a row is too wide, the table can reclaim extra space from shrinkable columns.

Calling this method requests a layout operation.

50.TableLayout10

1

布局:

注意:android:stretchColumns="1" 才有拉申效果

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:     android:layout_width="fill_parent"
 5:     android:layout_height="fill_parent"
 6:     android:stretchColumns="1">
 7:  
 8:     <TableRow>
 9:         <TextView
10:             android:text="@string/table_layout_10_user"
11:             android:textStyle="bold"
12:             android:gravity="right"
13:             android:padding="3dip" />
14:  
15:         <EditText android:id="@+id/username"
16:             android:text="@string/table_layout_10_username_text"
17:             android:padding="3dip"
18:             android:scrollHorizontally="true" />
19:     </TableRow>
20:  
21:     <TableRow>
22:         <TextView
23:             android:text="@string/table_layout_10_password"
24:             android:textStyle="bold"
25:             android:gravity="right"
26:             android:padding="3dip" />
27:  
28:         <EditText android:id="@+id/password"
29:             android:text="@string/table_layout_10_password_text"
30:             android:password="true"
31:             android:padding="3dip"
32:             android:scrollHorizontally="true" />
33:     </TableRow>
34:  
35:     <TableRow
36:         android:gravity="right">
37:  
38:         <Button android:id="@+id/cancel"
39:             android:text="@string/table_layout_10_cancel" />
40:  
41:         <Button android:id="@+id/login"
42:             android:text="@string/table_layout_10_login" />
43:     </TableRow>
44:  </TableLayout>
45:  

51.TableLayout11

1

布局:

注意:第6行和第37行

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="wrap_content"
 6:      android:stretchColumns="1">
 7:  
 8:      <TableRow>
 9:          <TextView
10:              android:layout_column="1"
11:              android:text="@string/table_layout_7_open"
12:              android:padding="3dip" />
13:          <TextView
14:              android:text="@string/table_layout_7_open_shortcut"
15:              android:gravity="right"
16:              android:padding="3dip" />
17:      </TableRow>
18:  
19:      <TableRow>
20:          <TextView
21:              android:layout_column="1"
22:              android:text="@string/table_layout_7_save"
23:              android:background="#FF00FF00"
24:              android:padding="3dip" />
25:          <TextView
26:              android:text="@string/table_layout_7_save_shortcut"
27:              android:gravity="right"
28:              android:padding="3dip" />
29:      </TableRow>
30:  
31:      <TableRow>
32:          <!-- Horizontally centers the content of the cell -->
33:          <TextView
34:              android:layout_column="1"
35:              android:text="@string/table_layout_7_save_as"
36:              android:background="#FFFF0000"
37:              android:layout_gravity="center_horizontal"
38:              android:padding="3dip" />
39:          <TextView
40:              android:text="@string/table_layout_7_save_as_shortcut"
41:              android:background="#FFFF00FF"
42:              android:gravity="right"
43:              android:padding="3dip" />
44:      </TableRow>
45:  
46:      <View
47:          android:layout_height="2dip"
48:          android:background="#FF909090" />
49:  
50:      <TableRow>
51:          <TextView
52:              android:text="@string/table_layout_7_x"
53:              android:padding="3dip" />
54:          <TextView
55:              android:text="@string/table_layout_7_import"
56:              android:padding="3dip" />
57:      </TableRow>
58:  
59:      <TableRow>
60:          <View
61:              android:layout_height="68dip"
62:              android:background="#FF909090" />
63:          <!-- Aligns the content of the cell to the bottom right -->
64:          <TextView
65:              android:text="@string/table_layout_7_export"
66:              android:background="#FFFF0000"
67:              android:layout_gravity="right|bottom"
68:              android:padding="3dip" />
69:          <TextView
70:              android:text="@string/table_layout_7_export_shortcut"
71:              android:background="#FF00FFFF"
72:              android:gravity="right"
73:              android:padding="3dip" />
74:      </TableRow>
75:  
76:      <View
77:          android:layout_height="2dip"
78:          android:background="#FF909090" />
79:  </TableLayout>
80:  

52.TableLayout12

1

布局:

注意:第26行android:layout_span="2"表明这个TextView跨2个格

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  
 4:  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="wrap_content">
 7:  
 8:      <TableRow>
 9:          <TextView
10:              android:text="@string/table_layout_12_a"
11:              android:background="#FFFF0000"
12:              android:padding="3dip" />
13:          <TextView
14:              android:text="@string/table_layout_12_b"
15:              android:background="#FF00FF00"
16:              android:padding="3dip" />
17:          <TextView
18:              android:text="@string/table_layout_12_c"
19:              android:background="#FF0000FF"
20:              android:padding="3dip" />
21:      </TableRow>
22:  
23:      <TableRow>
24:          <TextView
25:              android:text="@string/table_layout_12_d"
26:              android:layout_span="2"
27:              android:gravity="center_horizontal"
28:              android:background="#FF0000FF"
29:              android:padding="3dip" />
30:          <TextView
31:              android:text="@string/table_layout_12_e"
32:              android:background="#FF00FF00"
33:              android:padding="3dip" />
34:      </TableRow>
35:  
36:      <TableRow>
37:          <TextView
38:              android:text="@string/table_layout_12_f"
39:              android:background="#FFFF00FF"
40:              android:padding="3dip" />
41:          <TextView
42:              android:text="@string/table_layout_12_g"
43:              android:background="#FF00FF00"
44:              android:padding="3dip" />
45:          <TextView
46:              android:text="@string/table_layout_12_h"
47:              android:background="#FFFF0000"
48:              android:padding="3dip" />
49:      </TableRow>
50:  
51:      <TableRow>
52:          <TextView
53:              android:text="@string/table_layout_12_a"
54:              android:background="#FF00FF00"
55:              android:padding="3dip" />
56:          <TextView
57:              android:text="@string/table_layout_12_b"
58:              android:layout_span="2"
59:              android:gravity="center_horizontal"
60:              android:background="#FF0000FF"
61:              android:padding="3dip" />
62:      </TableRow>
63:  
64:      <TableRow>
65:          <TextView
66:              android:text="@string/table_layout_12_g"
67:              android:layout_span="3"
68:              android:gravity="center_horizontal"
69:              android:background="#FFC0C0C0"
70:              android:padding="3dip" />
71:      </TableRow>
72:  </TableLayout>
73:  

53.List4 在List里又从新设置了一个LinearLayout布局

1

源码:见List4

1:  public void onCreate(Bundle savedInstanceState) {
2:          super.onCreate(savedInstanceState);
3:   
4:          // Use our own list adapter
5:          setListAdapter(new SpeechListAdapter(this));
6:      }

54.List5

image 为没能点的空白

1

源码:第22行的方法isEnabled为判断是否为分隔符

 1:  public void onCreate(Bundle savedInstanceState) {
 2:      super.onCreate(savedInstanceState);
 3:   
 4:      setListAdapter(new MyListAdapter(this));
 5:  }
 6:   
 7:  private class MyListAdapter extends BaseAdapter {
 8:      public MyListAdapter(Context context) {
 9:          mContext = context;
10:      }
11:   
12:      public int getCount() {
13:          return mStrings.length;
14:      }
15:   
16:      @Override
17:      public boolean areAllItemsEnabled() {
18:          return false;
19:      }
20:   
21:      @Override
22:      public boolean isEnabled(int position) {
23:          return !mStrings[position].startsWith("-");
24:      }
25:   
26:      public Object getItem(int position) {
27:          return position;
28:      }
29:   
30:      public long getItemId(int position) {
31:          return position;
32:      }
33:   
34:      public View getView(int position, View convertView, ViewGroup parent) {
35:          TextView tv;
36:          if (convertView == null) {
37:              tv = (TextView) LayoutInflater.from(mContext).inflate(
38:                  android.R.layout.simple_expandable_list_item_1, parent, false);
39:          } else {
40:              tv = (TextView) convertView;
41:          }
42:          tv.setText(mStrings[position]);
43:          return tv;
44:      }
45:  
46:      private Context mContext;
47:  }
48:  
49:  private String[] mStrings = { "----------", "----------", "Abbaye de Belloc",
50:      "Abbaye du Mont des Cats", "Abertam", "----------", "Abondance",
51:      "----------", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis",
52:      "Afuega'l Pitu", "Airag", "----------", "Airedale", "Aisy Cendre",
53:      "----------", "Allgauer Emmentaler", "Alverca", "Ambert",
54:      "American Cheese", "Ami du Chambertin", "----------", "----------",
55:      "Anejo Enchilado", "Anneau du Vic-Bilh", "Anthoriro", "----------",
56:      "----------" };

55.List6 此为ListActivity,在把个List中显示标题,当点击List选项时弹出内容

1

思路:

55.1.

在OnCreate方法里给ListActivity设置了一个Adapter,SpeechListAdapter

1:  @Override
2:      public void onCreate(Bundle savedInstanceState) {
3:          super.onCreate(savedInstanceState);
4:   
5:          // Use our own list adapter
6:          setListAdapter(new SpeechListAdapter(this));
7:      }

55.2

SpeechListAdapter是继承自BaseAdapter,此Adapter由一个mTitles+mDialogue组成,由Boolean 变量mExpanded来控制Adapter是否显示mDialogue的内容,此核心代码如下:

 1:  /**
 2:           * Make a SpeechView to hold each row.
 3:           * 
 4:           * @see android.widget.ListAdapter#getView(int, android.view.View,
 5:           *      android.view.ViewGroup)
 6:           */
 7:          public View getView(int position, View convertView, ViewGroup parent) {
 8:              SpeechView sv;
 9:              if (convertView == null) {
10:                  sv = new SpeechView(mContext, mTitles[position], mDialogue[position],
11:                      mExpanded[position]);
12:              } else {
13:                  sv = (SpeechView) convertView;
14:                  sv.setTitle(mTitles[position]);
15:                  sv.setDialogue(mDialogue[position]);
16:                  sv.setExpanded(mExpanded[position]);
17:              }
18:  
19:              return sv;
20:          }
21:  
22:          public void toggle(int position) {
23:              mExpanded[position] = !mExpanded[position];
24:              notifyDataSetChanged();//Notifies the attached View that the underlying data has been changed and it should refresh itself.
25:          }

55.3 为adapter自定义View

在getView中把postion,convertView传给了一个SpeechView对象,此SpeechView为一个线性布局Linearlayout中有两个子TextView,代码如下

 1:  private class SpeechView extends LinearLayout {
 2:          public SpeechView(Context context, String title, String dialogue,
 3:              boolean expanded) {
 4:              super(context);
 5:   
 6:              this.setOrientation(VERTICAL);
 7:   
 8:              // Here we build the child views in code. They could also have
 9:              // been specified in an XML file.
10:  
11:              mTitle = new TextView(context);
12:              mTitle.setText(title);
13:              addView(mTitle, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
14:                  LayoutParams.WRAP_CONTENT));
15:   
16:              mDialogue = new TextView(context);
17:              mDialogue.setText(dialogue);
18:              addView(mDialogue, new LinearLayout.LayoutParams(
19:                  LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
20:   
21:              mDialogue.setVisibility(expanded ? VISIBLE : GONE);
22:          }
23:   
24:          /**
25:           * Convenience method to set the title of a SpeechView
26:           */
27:          public void setTitle(String title) {
28:              mTitle.setText(title);
29:          }
30:   
31:          /**
32:           * Convenience method to set the dialogue of a SpeechView
33:           */
34:          public void setDialogue(String words) {
35:              mDialogue.setText(words);
36:          }
37:   
38:          /**
39:           * Convenience method to expand or hide the dialogue
40:           */
41:          public void setExpanded(boolean expanded) {
42:              mDialogue.setVisibility(expanded ? VISIBLE : GONE);
43:          }
44:   
45:          private TextView mTitle;
46:          private TextView mDialogue;
47:      }

55.4 实现List被单击单件

1:  @Override
2:      protected void onListItemClick(ListView l, View v, int position, long id) {
3:          ((SpeechListAdapter) getListAdapter()).toggle(position);
4:      }

它用到了adapter中的一个方法,通知View有更改使其更新

1:  public void toggle(int position) {
2:          mExpanded[position] = !mExpanded[position];
3:          notifyDataSetChanged();//Notifies the attached View that the underlying data has been changed and it should refresh itself.
4:      }

56.List8 此例也为ListActivity 。当点击 New photo时,在下面动态的填加图片List

1 

从布局中可以看出在LineraLayout中两个按钮下面是一个FrameLayout,当有内容时显示ListView,当无内容时显示TextView

注意:第34行<ListView android:id="@android:id/list" 表明这个ListView为ListActivity的List

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:orientation="vertical"
 5:      android:layout_width="fill_parent" 
 6:      android:layout_height="fill_parent">
 7:      
 8:      <LinearLayout
 9:          android:orientation="horizontal"
10:          android:layout_width="fill_parent" 
11:          android:layout_height="wrap_content">
12:          
13:          <Button android:id="@+id/add"
14:              android:layout_width="wrap_content" 
15:              android:layout_height="wrap_content"
16:              android:text="@string/list_8_new_photo"/>
17:              
18:          <Button android:id="@+id/clear"
19:              android:layout_width="wrap_content" 
20:              android:layout_height="wrap_content"
21:              android:text="@string/list_8_clear_photos"/>
22:              
23:      </LinearLayout>
24:      
25:      <!-- The frame layout is here since we will be showing either
26:      the empty view or the list view.  -->
27:      <FrameLayout
28:          android:layout_width="fill_parent" 
29:          android:layout_height="0dip"
30:          android:layout_weight="1" >
31:          <!-- Here is the list. Since we are using a ListActivity, we
32:               have to call it "@android:id/list" so ListActivity will
33:               find it -->
34:          <ListView android:id="@android:id/list"
35:              android:layout_width="fill_parent" 
36:              android:layout_height="fill_parent"
37:              android:drawSelectorOnTop="false"/>
38:          
39:          <!-- Here is the view to show if the list is emtpy -->
40:          <TextView android:id="@+id/empty"
41:              android:layout_width="fill_parent" 
42:              android:layout_height="fill_parent"
43:              android:text="@string/list_8_no_photos"/>
44:              
45:      </FrameLayout>
46:          
47:  </LinearLayout>

在OnCreate里创建了一个PhotoAdaper(自定义类)

 1:          // Use a custom layout file
 2:          setContentView(R.layout.list_8);
 3:   
 4:          // Tell the list view which view to display when the list is empty
 5:          getListView().setEmptyView(findViewById(R.id.empty));//当adapter为空时显示的View
 6:  
 7:          // Set up our adapter
 8:          mAdapter = new PhotoAdapter(this);
 9:          setListAdapter(mAdapter);
10:  

PhotoAdaper为继承BaseAdapter的ImageView,即list里显示一个ImageView

 1:  public View getView(int position, View convertView, ViewGroup parent) {
 2:              // Make an ImageView to show a photo
 3:              ImageView i = new ImageView(mContext);
 4:   
 5:              i.setImageResource(mPhotos.get(position));
 6:              i.setAdjustViewBounds(true);//保持图片比例
 7:              i.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT,
 8:                  LayoutParams.WRAP_CONTENT));
 9:              // Give it a nice background
10:              i.setBackgroundResource(R.drawable.picture_frame);
11:              return i;
12:          }

在OnCreate里设置两个按钮事件来填加,清空ImageView

 1:  // Wire up the clear button to remove all photos
 2:  Button clear = (Button) findViewById(R.id.clear);
 3:  clear.setOnClickListener(new View.OnClickListener() {
 4:   
 5:      public void onClick(View v) {
 6:          mAdapter.clearPhotos();
 7:      }
 8:  });
 9:   
10:  // Wire up the add button to add a new photo
11:  Button add = (Button) findViewById(R.id.add);
12:  add.setOnClickListener(new View.OnClickListener() {
13:   
14:      public void onClick(View v) {
15:          mAdapter.addPhotos();
16:      }
17:  });

在PhotoAdaper里有两个方法用于填加,清空mPhotos,mPhotos为一个ArrayList

 1:  public void clearPhotos() {
 2:              mPhotos.clear();
 3:              notifyDataSetChanged();
 4:          }
 5:  
 6:          public void addPhotos() {
 7:              int whichPhoto = (int) Math
 8:                  .round(Math.random() * (mPhotoPool.length - 1));
 9:              int newPhoto = mPhotoPool[whichPhoto];
10:              mPhotos.add(newPhoto);
11:              notifyDataSetChanged();
12:          }

57.list10

1

源码就这些:

 1:  @Override
 2:  public void onCreate(Bundle savedInstanceState) {
 3:      super.onCreate(savedInstanceState);
 4:   
 5:      setListAdapter(new ArrayAdapter<String>(this,
 6:          android.R.layout.simple_list_item_single_choice, GENRES));
 7:   
 8:      final ListView listView = getListView();
 9:   
10:      listView.setItemsCanFocus(false);
11:      listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//设置选择行为,此为单选
12:  }

58.List11 多选List

1

源码就这些:

注意第8行 final ListView listView = getListView();获得当前List

 1:  @Override
 2:      public void onCreate(Bundle savedInstanceState) {
 3:          super.onCreate(savedInstanceState);
 4:   
 5:          setListAdapter(new ArrayAdapter<String>(this,
 6:              android.R.layout.simple_list_item_multiple_choice, GENRES));
 7:   
 8:          final ListView listView = getListView();
 9:   
10:          listView.setItemsCanFocus(false);
11:          listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
12:      }
13:   

59.List12 

布局由一个List+EditView组成 ,EditView正要输入时可以自动跑到输入法的上面。List里显示EditView输入的内容。并且List从最底部开始显示

1

布局:

注意:第10行android:stackFromBottom="true" android:transcriptMode="normal"

通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:orientation="vertical" android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent" android:paddingLeft="8dip"
 6:      android:paddingRight="8dip">
 7:  
 8:      <ListView android:id="@android:id/list" android:layout_width="fill_parent"
 9:          android:layout_height="0dip" android:layout_weight="1"
10:          android:stackFromBottom="true" android:transcriptMode="normal" />
11:  
12:      <EditText android:id="@+id/userText" android:layout_width="fill_parent"
13:          android:layout_height="wrap_content" />
14:  
15:  </LinearLayout>

源码:

注意:第24行mAdapter.add(text);直接在ArrayAdapter里加元素

 1:  @Override
 2:  protected void onCreate(Bundle savedInstanceState) {
 3:      super.onCreate(savedInstanceState);
 4:   
 5:      setContentView(R.layout.list_12);
 6:   
 7:      mAdapter = new ArrayAdapter<String>(this,
 8:          android.R.layout.simple_list_item_1, mStrings);
 9:   
10:      setListAdapter(mAdapter);
11:   
12:      mUserText = (EditText) findViewById(R.id.userText);
13:   
14:      mUserText.setOnClickListener(this);
15:      mUserText.setOnKeyListener(this);
16:  }
17:   
18:  public void onClick(View v) {
19:      sendText();
20:  }
21:   
22:  private void sendText() {
23:      String text = mUserText.getText().toString();
24:      mAdapter.add(text);
25:      mUserText.setText(null);
26:  }
27:   
28:  public boolean onKey(View v, int keyCode, KeyEvent event) {
29:      if (event.getAction() == KeyEvent.ACTION_DOWN) {
30:          switch (keyCode) {
31:          case KeyEvent.KEYCODE_DPAD_CENTER:
32:          case KeyEvent.KEYCODE_ENTER:
33:              sendText();
34:              return true;
35:          }
36:      }
37:      return false;
38:  }

59.List14

1

在OnCreate里给ListActivity设置了一个自定义的Adapter

1:  @Override
2:  public void onCreate(Bundle savedInstanceState) {
3:      super.onCreate(savedInstanceState);
4:      setListAdapter(new EfficientAdapter(this));
5:  }

EfficiectAdapter的构造里直接从ListActivity获得一个布局LayoutInflater,

注意:第3行mInflater = LayoutInflater.from(context);

 1:  public EfficientAdapter(Context context) {
 2:          // Cache the LayoutInflate to avoid asking for a new one each time.
 3:          mInflater = LayoutInflater.from(context);
 4:   
 5:          // Icons bound to the rows.
 6:          mIcon1 = BitmapFactory.decodeResource(context.getResources(),
 7:              R.drawable.icon48x48_1);
 8:          mIcon2 = BitmapFactory.decodeResource(context.getResources(),
 9:              R.drawable.icon48x48_2);
10:      }

创建了一个用去存View的类ViewHolder,

1:  static class ViewHolder {
2:              TextView text;
3:              ImageView icon;
4:          }

在EfficiectAdapter的getView

注意:第13行convertView = mInflater.inflate(R.layout.list_item_icon_text, null);直接把convertView 的布局设置成

R.layout.list_item_icon_text

convertView 为要显示在Adapter中的View

 1:  public View getView(int position, View convertView, ViewGroup parent) {
 2:          // A ViewHolder keeps references to children views to avoid unneccessary
 3:          // calls
 4:          // to findViewById() on each row.
 5:          ViewHolder holder;
 6:   
 7:          // When convertView is not null, we can reuse it directly, there is no
 8:          // need
 9:          // to reinflate it. We only inflate a new View when the convertView
10:          // supplied
11:          // by ListView is null.
12:          if (convertView == null) {
13:              convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
14:   
15:              // Creates a ViewHolder and store references to the two children views
16:              // we want to bind data to.
17:              holder = new ViewHolder();
18:              holder.text = (TextView) convertView.findViewById(R.id.text);
19:              holder.icon = (ImageView) convertView.findViewById(R.id.icon);
20:   
21:              convertView.setTag(holder);
22:          } else {
23:              // Get the ViewHolder back to get fast access to the TextView
24:              // and the ImageView.
25:              holder = (ViewHolder) convertView.getTag();
26:          }
27:   
28:          // Bind the data efficiently with the holder.
29:          holder.text.setText(DATA[position]);
30:          holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
31:   
32:          return convertView;
33:      }

60.ProgressBar1 进度条

1

Layout布局中ProgressBar部分:

第2行是ProgressBar的style样式,第5行为ProgressBar的最大值,第6行为默认ProgressBar的初始值,第7行为第二个ProgressBar的初始值

PorgressBar的style为style="?android:attr/progressBarStyleHorizontal"

1:  <ProgressBar android:id="@+id/progress_horizontal"
2:        style="?android:attr/progressBarStyleHorizontal"
3:        android:layout_width="200dip"
4:        android:layout_height="wrap_content"
5:        android:max="100"
6:        android:progress="50"
7:        android:secondaryProgress="75" />

此程序在标题栏上显示了ProgressBar,代码如下:

第7,8行一定要乘与100,因为// Title progress is in range 0..10000,即标题拦的进度在0到10000之间

1:  // Request the progress bar to be shown in the title
2:  requestWindowFeature(Window.FEATURE_PROGRESS);
3:  setContentView(R.layout.progressbar_1);
4:  setProgressBarVisibility(true);
5:   
6:  final ProgressBar progressHorizontal = (ProgressBar) findViewById(R.id.progress_horizontal);
7:  setProgress(progressHorizontal.getProgress()*100);//无这两句标题拦里不显示进度条ProgressBar,一条要乘与100
8:  setSecondaryProgress(progressHorizontal.getSecondaryProgress() *100);

加减进度条进度值的方法:

注意:progressHorizontal.incrementSecondaryProgressBy(-1); 正数为加,负数为减

1:  Button button = (Button) findViewById(R.id.increase);
2:          button.setOnClickListener(new Button.OnClickListener() {
3:              public void onClick(View v) {
4:                  progressHorizontal.incrementProgressBy(1);
5:                  // Title progress is in range 0..10000
6:                  setProgress(100 * progressHorizontal.getProgress());
7:              }
8:          });
1:  button = (Button) findViewById(R.id.decrease_secondary);
2:          button.setOnClickListener(new Button.OnClickListener() {
3:              public void onClick(View v) {
4:                  progressHorizontal.incrementSecondaryProgressBy(-1);
5:                  // Title progress is in range 0..10000
6:                  setSecondaryProgress(100 * progressHorizontal
7:                          .getSecondaryProgress());
8:              }
9:          });

61.ProgressBar2 进度条

1

上面显示了4个ProgressBar ,布局为:

注意:style="?android:attr/progressBarStyleLarge" style="?android:attr/progressBarStyleSmall"  style="?android:attr/progressBarStyleSmallTitle"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 4:      android:orientation="vertical"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="wrap_content">
 7:  
 8:      <ProgressBar android:id="@+android:id/progress_large"
 9:          style="?android:attr/progressBarStyleLarge"
10:          android:layout_width="wrap_content"
11:          android:layout_height="wrap_content" />
12:  
13:      <ProgressBar android:id="@+android:id/progress"
14:          android:layout_width="wrap_content"
15:          android:layout_height="wrap_content" />
16:  
17:      <ProgressBar android:id="@+android:id/progress_small"
18:          style="?android:attr/progressBarStyleSmall"
19:          android:layout_width="wrap_content"
20:          android:layout_height="wrap_content" />
21:  
22:      <ProgressBar android:id="@+android:id/progress_small_title"
23:          style="?android:attr/progressBarStyleSmallTitle"
24:          android:layout_width="wrap_content"
25:          android:layout_height="wrap_content" />
26:  
27:  </LinearLayout>
28:  

最后在OnCreate里

1:  // Request for the progress bar to be shown in the title
2:          requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
3:   
4:          setContentView(R.layout.progressbar_2);
5:   
6:          // Make sure the progress bar is visible
7:          setProgressBarVisibility(true);

62. ProgressBar3

1

此程序为两个按钮,上面的激活带标题的ProgressDialog  ,下面激活不带标题的ProgressDialog

OnCreate方法:

 1:  private static final int DIALOG1_KEY = 0;
 2:  private static final int DIALOG2_KEY = 1;
 3:   
 4:  @Override
 5:  protected void onCreate(Bundle savedInstanceState) {
 6:      super.onCreate(savedInstanceState);
 7:   
 8:      setContentView(R.layout.progressbar_3);
 9:   
10:      Button button = (Button) findViewById(R.id.showIndeterminate);
11:      button.setOnClickListener(new View.OnClickListener() {
12:          public void onClick(View v) {
13:              showDialog(DIALOG1_KEY);
14:          }
15:      });
16:   
17:      button = (Button) findViewById(R.id.showIndeterminateNoTitle);
18:      button.setOnClickListener(new View.OnClickListener() {
19:          public void onClick(View v) {
20:              showDialog(DIALOG2_KEY);
21:          }
22:      });
23:  }

由showDialog(DIALOG2_KEY) 激活对话框的方法:

 1:  @Override
 2:  protected Dialog onCreateDialog(int id) {
 3:      switch (id) {
 4:      case DIALOG1_KEY: {
 5:          ProgressDialog dialog = new ProgressDialog(this);
 6:          dialog.setTitle("Indeterminate");
 7:          dialog.setMessage("Please wait while loading...");
 8:          dialog.setIndeterminate(true);
 9:          dialog.setCancelable(true);
10:          return dialog;
11:      }
12:      case DIALOG2_KEY: {
13:          ProgressDialog dialog = new ProgressDialog(this);
14:          dialog.setMessage("Please wait while loading...");
15:          dialog.setIndeterminate(true);
16:          dialog.setCancelable(true);
17:          return dialog;
18:      }
19:      }
20:      return null;
21:  }

63.ProgressBar4  在标题栏显示进度条(右上角)

1

源码:

 1:  private boolean mToggleIndeterminate = false;
 2:   
 3:      @Override
 4:      protected void onCreate(Bundle savedInstanceState) {
 5:          super.onCreate(savedInstanceState);
 6:   
 7:          // Request progress bar
 8:          requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//一定要有
 9:          setContentView(R.layout.progressbar_4);
10:          setProgressBarIndeterminateVisibility(mToggleIndeterminate);//Whether to show the progress bars in the title
11:  
12:          Button button = (Button) findViewById(R.id.toggle);
13:          button.setOnClickListener(new Button.OnClickListener() {
14:              public void onClick(View v) {
15:                  mToggleIndeterminate = !mToggleIndeterminate;
16:                  setProgressBarIndeterminateVisibility(mToggleIndeterminate);
17:              }
18:          });
19:      }

64.RadioGroup1

1

布局:一个RadioGroup里有4个RadioButton,默认被选定的是android:checkedButton="@+id/lunch"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  
 4:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="fill_parent"
 7:      android:orientation="vertical">
 8:      <RadioGroup
 9:          android:layout_width="fill_parent"
10:          android:layout_height="wrap_content"
11:          android:orientation="vertical"
12:          android:checkedButton="@+id/lunch"
13:          android:id="@+id/menu">
14:          <RadioButton
15:              android:text="@string/radio_group_1_breakfast"
16:              android:id="@+id/breakfast"
17:              />
18:          <RadioButton
19:              android:text="@string/radio_group_1_lunch"
20:              android:id="@id/lunch" />
21:          <RadioButton
22:              android:text="@string/radio_group_1_dinner"
23:              android:id="@+id/dinner" />
24:          <RadioButton
25:              android:text="@string/radio_group_1_all"
26:              android:id="@+id/all" />
27:          <TextView
28:              android:text="@string/radio_group_1_selection"
29:              android:id="@+id/choice" />
30:      </RadioGroup>
31:      <Button
32:          android:layout_width="wrap_content"
33:          android:layout_height="wrap_content"
34:          android:text="@string/radio_group_1_clear"
35:          android:id="@+id/clear" />
36:  </LinearLayout>

源码:

在第9行到15行动态往RadioGroup里addView加入了一个RadioButton,

第19行设置选择改变setOnCheckedChangeListener(this),在第28行实现了onCheckedChanged方法

 1:  @Override
 2:      protected void onCreate(Bundle savedInstanceState) {
 3:          super.onCreate(savedInstanceState);
 4:   
 5:          setContentView(R.layout.radio_group_1);
 6:          mRadioGroup = (RadioGroup) findViewById(R.id.menu);
 7:   
 8:          // test adding a radio button programmatically
 9:          RadioButton newRadioButton = new RadioButton(this);
10:          newRadioButton.setText(R.string.radio_group_snack);
11:          newRadioButton.setId(R.id.snack);
12:          LinearLayout.LayoutParams layoutParams = new RadioGroup.LayoutParams(
13:                  RadioGroup.LayoutParams.WRAP_CONTENT,
14:                  RadioGroup.LayoutParams.WRAP_CONTENT);
15:          mRadioGroup.addView(newRadioButton, 0, layoutParams);
16:   
17:          // test listening to checked change events
18:          String selection = getString(R.string.radio_group_selection);
19:          mRadioGroup.setOnCheckedChangeListener(this);
20:          mChoice = (TextView) findViewById(R.id.choice);
21:          mChoice.setText(selection + mRadioGroup.getCheckedRadioButtonId());
22:   
23:          // test clearing the selection
24:          Button clearButton = (Button) findViewById(R.id.clear);
25:          clearButton.setOnClickListener(this);
26:      }
27:   
28:      public void onCheckedChanged(RadioGroup group, int checkedId) {
29:          String selection = getString(R.string.radio_group_selection);
30:          String none = getString(R.string.radio_group_none);
31:          mChoice.setText(selection
32:                  + (checkedId == View.NO_ID ? none : checkedId));
33:      }
34:  
35:      public void onClick(View v) {
36:          mRadioGroup.clearCheck();
37:      }

65.

1

布局:

注意:第12行,18行的android:numStars="3"星数 第13行,19行的android:rating="2.5" 默认初始值

第31行,40行的样式 style="?android:attr/ratingBarStyleSmall"   style="?android:attr/ratingBarStyleIndicator"

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:orientation="vertical"
 5:      android:paddingLeft="10dip"
 6:      android:layout_width="fill_parent"
 7:      android:layout_height="fill_parent">
 8:  
 9:      <RatingBar android:id="@+id/ratingbar1"
10:          android:layout_width="wrap_content"
11:          android:layout_height="wrap_content"
12:          android:numStars="3"
13:          android:rating="2.5" />
14:  
15:      <RatingBar android:id="@+id/ratingbar2"
16:          android:layout_width="wrap_content"
17:          android:layout_height="wrap_content"
18:          android:numStars="5"
19:          android:rating="2.25" />
20:  
21:      <LinearLayout
22:          android:layout_width="fill_parent"
23:          android:layout_height="wrap_content"
24:          android:layout_marginTop="10dip">
25:          
26:          <TextView android:id="@+id/rating"
27:              android:layout_width="wrap_content"
28:              android:layout_height="wrap_content" />
29:              
30:          <RatingBar android:id="@+id/small_ratingbar"
31:              style="?android:attr/ratingBarStyleSmall"
32:              android:layout_marginLeft="5dip"
33:              android:layout_width="wrap_content"
34:              android:layout_height="wrap_content"
35:              android:layout_gravity="center_vertical" />
36:              
37:      </LinearLayout>
38:  
39:      <RatingBar android:id="@+id/indicator_ratingbar"
40:          style="?android:attr/ratingBarStyleIndicator"
41:          android:layout_marginLeft="5dip"
42:          android:layout_width="wrap_content"
43:          android:layout_height="wrap_content"
44:          android:layout_gravity="center_vertical" />
45:              
46:  </LinearLayout>
47:  

mIndicatorRatingBar mSmallRatingBar两个变量为image 这两个RatingBar

 1:  // We copy the most recently changed rating on to these indicator-only
 2:          // rating bars
 3:          mIndicatorRatingBar = (RatingBar) findViewById(R.id.indicator_ratingbar);
 4:          mSmallRatingBar = (RatingBar) findViewById(R.id.small_ratingbar);
 5:  
 6:          // The different rating bars in the layout. Assign the listener to us.
 7:          ((RatingBar) findViewById(R.id.ratingbar1))
 8:                  .setOnRatingBarChangeListener(this);
 9:          ((RatingBar) findViewById(R.id.ratingbar2))
10:                  .setOnRatingBarChangeListener(this);

第7到第10行setOnRatingBarChangeListener(this);方法内来改变

 1:  public void onRatingChanged(RatingBar ratingBar, float rating,
 2:              boolean fromTouch) {
 3:          final int numStars = ratingBar.getNumStars();
 4:          mRatingText.setText(getString(R.string.ratingbar_rating) + " " + rating
 5:                  + "/" + numStars);
 6:   
 7:          // Since this rating bar is updated to reflect any of the other rating
 8:          // bars, we should update it to the current values.
 9:          if (mIndicatorRatingBar.getNumStars() != numStars) {
10:              mIndicatorRatingBar.setNumStars(numStars);
11:              mSmallRatingBar.setNumStars(numStars);
12:          }
13:          if (mIndicatorRatingBar.getRating() != rating) {
14:              mIndicatorRatingBar.setRating(rating);
15:              mSmallRatingBar.setRating(rating);
16:          }
17:          final float ratingBarStepSize = ratingBar.getStepSize();
18:          if (mIndicatorRatingBar.getStepSize() != ratingBarStepSize) {
19:              mIndicatorRatingBar.setStepSize(ratingBarStepSize);
20:              mSmallRatingBar.setStepSize(ratingBarStepSize);
21:          }
22:      }

当ratingBar为三个星时,image

当ratingBar为五个星时,image

66.ScrollBar1

1

它就在布局XML文件里的ScrollView里加入了N个TextView

 1:  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 2:      android:layout_width="fill_parent"
 3:      android:layout_height="wrap_content">
 4:  
 5:      <LinearLayout
 6:          android:orientation="vertical"
 7:          android:layout_width="fill_parent"
 8:          android:layout_height="wrap_content">
 9:  
10:          <TextView
11:              android:layout_width="fill_parent"
12:              android:layout_height="wrap_content"
13:              android:text="@string/scrollbar_1_text"/>
14:          <TextView
15:              android:layout_width="fill_parent"
16:              android:layout_height="wrap_content"
17:              android:text="@string/scrollbar_1_text"/>
18:          <TextView
19:              android:layout_width="fill_parent"
20:              android:layout_height="wrap_content"
21:              android:text="@string/scrollbar_1_text"/>

67.ScrollBar2

1

和上面的例子就差在颜色上,

注意第4.5行的android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track" android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb"

 1:  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 2:      android:layout_width="fill_parent"
 3:      android:layout_height="wrap_content"
 4:      android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track"
 5:      android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb"
 6:      android:scrollbarSize="12dip">
 7:  
 8:      <LinearLayout
 9:          android:orientation="vertical"
10:          android:layout_width="fill_parent"
11:          android:layout_height="wrap_content">
12:  
13:          <TextView
14:              android:layout_width="fill_parent"
15:              android:layout_height="wrap_content"
16:              android:text="@string/scrollbar_2_text"/>
17:          <TextView
18:              android:layout_width="fill_parent"
19:              android:layout_height="wrap_content"
20:              android:text="@string/scrollbar_2_text"/>

scrollbar_vertical_track.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  
4:  <shape xmlns:android="http://schemas.android.com/apk/res/android">
5:      <gradient android:startColor="#505050" android:endColor="#C0C0C0"
6:              android:angle="0"/>
7:      <corners android:radius="0dp" />
8:  </shape>
9:  

scrollbar_vertical_thumb.xml

1:  <?xml version="1.0" encoding="utf-8"?>
2:  
3:  <shape xmlns:android="http://schemas.android.com/apk/res/android">
4:      <gradient android:startColor="#3333FF" android:endColor="#8080FF"
5:              android:angle="0"/>
6:      <corners android:radius="6dp" />
7:  </shape>
8:  

68.ScrollBar3

1

第4行设置style image

1:   
2:  setContentView(R.layout.scrollbar3);
3:   
4:  findViewById(R.id.view3).setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);

布局:

注意:第114行的style image android:scrollbarStyle="outsideInset"

  1:  <?xml version="1.0" encoding="utf-8"?>
  2:  
  3:  
  4:  <!-- Demonstrates scrolling with a ScrollView. -->
  5:  
  6:  <LinearLayout
  7:      xmlns:android="http://schemas.android.com/apk/res/android"
  8:      android:layout_width="fill_parent"
  9:      android:layout_height="fill_parent"
 10:      android:orientation="vertical">
 11:  
 12:      <LinearLayout
 13:          android:layout_width="fill_parent"
 14:          android:layout_height="wrap_content"
 15:          android:orientation="horizontal">
 16:  
 17:          <ScrollView
 18:              android:layout_width="100dip"
 19:              android:layout_height="120dip"
 20:              android:background="#FF0000">
 21:              <LinearLayout
 22:                  android:orientation="vertical"
 23:                  android:layout_width="fill_parent"
 24:                  android:layout_height="fill_parent">
 25:  
 26:                  <TextView
 27:                      android:layout_width="fill_parent"
 28:                      android:layout_height="wrap_content"
 29:                      android:text="@string/scrollbar_2_text" />
 30:                  <TextView
 31:                      android:layout_width="fill_parent"
 32:                      android:layout_height="wrap_content"
 33:                      android:text="@string/scrollbar_2_text" />
 34:                  <TextView
 35:                      android:layout_width="fill_parent"
 36:                      android:layout_height="wrap_content"
 37:                      android:text="@string/scrollbar_2_text" />
 38:                  <TextView
 39:                      android:layout_width="fill_parent"
 40:                      android:layout_height="wrap_content"
 41:                      android:text="@string/scrollbar_2_text" />
 42:                  <TextView
 43:                      android:layout_width="fill_parent"
 44:                      android:layout_height="wrap_content"
 45:                      android:text="@string/scrollbar_2_text" />
 46:                  <TextView
 47:                      android:layout_width="fill_parent"
 48:                      android:layout_height="wrap_content"
 49:                      android:text="@string/scrollbar_2_text" />
 50:                  <TextView
 51:                      android:layout_width="fill_parent"
 52:                      android:layout_height="wrap_content"
 53:                      android:text="@string/scrollbar_2_text" />
 54:                  <TextView
 55:                      android:layout_width="fill_parent"
 56:                      android:layout_height="wrap_content"
 57:                      android:text="@string/scrollbar_2_text" />
 58:                  <TextView
 59:                      android:layout_width="fill_parent"
 60:                      android:layout_height="wrap_content"
 61:                      android:text="@string/scrollbar_2_text" />
 62:                  <TextView
 63:                      android:layout_width="fill_parent"
 64:                      android:layout_height="wrap_content"
 65:                      android:text="@string/scrollbar_2_text" />
 66:              </LinearLayout>
 67:          </ScrollView>
 68:  
 69:          <ScrollView
 70:              android:layout_width="100dip"
 71:              android:layout_height="120dip"
 72:              android:background="#00FF00"
 73:              android:paddingRight="12dip">
 74:              <TextView
 75:                  android:layout_width="fill_parent"
 76:                  android:layout_height="wrap_content"
 77:                  android:text="@string/scrollbar_3_text"
 78:                  android:textColor="#000000"
 79:                  android:background="#60AA60" />
 80:          </ScrollView>
 81:  
 82:          <ScrollView
 83:              android:id="@+id/view3"
 84:              android:layout_width="100dip"
 85:              android:layout_height="120dip"
 86:              android:background="@android:drawable/edit_text">
 87:              <TextView
 88:                  android:layout_width="fill_parent"
 89:                  android:layout_height="wrap_content"
 90:                  android:textColor="#000000"
 91:                  android:text="@string/scrollbar_3_text" />
 92:          </ScrollView>
 93:      </LinearLayout>
 94:  
 95:      <LinearLayout
 96:          android:layout_width="fill_parent"
 97:          android:layout_height="wrap_content">
 98:          <ScrollView
 99:              android:id="@+id/view4"
100:              android:layout_width="100dip"
101:              android:layout_height="120dip"
102:              android:scrollbarStyle="outsideOverlay"
103:              android:background="@android:drawable/edit_text">
104:              <TextView
105:                  android:layout_width="fill_parent"
106:                  android:layout_height="wrap_content"
107:                  android:textColor="#000000"
108:                  android:text="@string/scrollbar_3_text" />
109:          </ScrollView>
110:          <ScrollView
111:              android:id="@+id/view5"
112:              android:layout_width="100dip"
113:              android:layout_height="120dip"
114:              android:scrollbarStyle="outsideInset"
115:              android:background="@android:drawable/edit_text">
116:              <TextView
117:                  android:layout_width="fill_parent"
118:                  android:layout_height="wrap_content"
119:                  android:textColor="#000000"
120:                  android:text="@string/scrollbar_3_text" />
121:          </ScrollView>
122:      </LinearLayout>
123:  </LinearLayout>
124:  

69.SeekBar1

1

布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:orientation="vertical"
 5:      android:layout_width="fill_parent"
 6:      android:layout_height="fill_parent">
 7:  
 8:      <SeekBar android:id="@+id/seek"
 9:          android:layout_width="fill_parent"
10:          android:layout_height="wrap_content"
11:          android:max="100"
12:          android:progress="50"
13:          android:secondaryProgress="75" />
14:  
15:      <TextView android:id="@+id/progress"
16:             android:layout_width="fill_parent"
17:          android:layout_height="wrap_content" />
18:  
19:      <TextView android:id="@+id/tracking"
20:             android:layout_width="fill_parent"
21:          android:layout_height="wrap_content" />
22:  </LinearLayout>

源码:

 1:  SeekBar mSeekBar;
 2:      TextView mProgressText;
 3:      TextView mTrackingText;
 4:   
 5:      @Override
 6:      protected void onCreate(Bundle savedInstanceState) {
 7:          super.onCreate(savedInstanceState);
 8:   
 9:          setContentView(R.layout.seekbar_1);
10:   
11:          mSeekBar = (SeekBar) findViewById(R.id.seek);
12:          mSeekBar.setOnSeekBarChangeListener(this);
13:          mProgressText = (TextView) findViewById(R.id.progress);
14:          mTrackingText = (TextView) findViewById(R.id.tracking);
15:      }
16:   
17:      public void onProgressChanged(SeekBar seekBar, int progress,
18:              boolean fromTouch) {
19:          mProgressText.setText(progress + " "
20:                  + getString(R.string.seekbar_from_touch) + "=" + fromTouch);
21:      }
22:  
23:      public void onStartTrackingTouch(SeekBar seekBar) {
24:          mTrackingText.setText(getString(R.string.seekbar_tracking_on));
25:      }
26:  
27:      public void onStopTrackingTouch(SeekBar seekBar) {
28:          mTrackingText.setText(getString(R.string.seekbar_tracking_off));
29:      }

70.Spinner1

1 1

注意:源码第7行ArrayAdapter用R.array.colors数组来设置

 1:  @Override
 2:  public void onCreate(Bundle savedInstanceState) {
 3:      super.onCreate(savedInstanceState);
 4:      setContentView(R.layout.spinner_1);
 5:   
 6:      Spinner s1 = (Spinner) findViewById(R.id.spinner1);
 7:      ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
 8:              this, R.array.colors, android.R.layout.simple_spinner_item);
 9:      adapter
10:              .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
11:      s1.setAdapter(adapter);
12:   
13:      Spinner s2 = (Spinner) findViewById(R.id.spinner2);
14:      adapter = ArrayAdapter.createFromResource(this, R.array.planets,
15:              android.R.layout.simple_spinner_item);
16:      adapter
17:              .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
18:      s2.setAdapter(adapter);
19:  }

布局:

android:prompt="@string/spinner_1_color_prompt"为提示,image

1:  <Spinner android:id="@+id/spinner1"
2:        android:layout_width="fill_parent"
3:        android:layout_height="wrap_content"
4:        android:drawSelectorOnTop="true"
5:        android:prompt="@string/spinner_1_color_prompt"
6:    />

71.Tabs1

2

源码:第15行继承TabActivity

 1:  import android.app.TabActivity;
 2:  import android.os.Bundle;
 3:  import android.widget.TabHost;
 4:  import android.widget.TabHost.TabSpec;
 5:  import android.view.LayoutInflater;
 6:  import android.view.View;
 7:   
 8:  import com.example.android.apis.R;
 9:   
10:  /**
11:   * An example of tabs that uses labels (
12:   * {@link TabSpec#setIndicator(CharSequence)}) for its indicators and views by
13:   * id from a layout file ({@link TabSpec#setContent(int)}).
14:   */
15:  public class Tabs1 extends TabActivity {
16:   
17:      @Override
18:      protected void onCreate(Bundle savedInstanceState) {
19:          super.onCreate(savedInstanceState);
20:          TabHost tabHost = getTabHost();
21:  
22:          LayoutInflater.from(this).inflate(R.layout.tabs1,
23:                  tabHost.getTabContentView(), true);
24:  
25:          tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1")
26:                  .setContent(R.id.view1));
27:          tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab2")
28:                  .setContent(R.id.view2));
29:          tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3")
30:                  .setContent(R.id.view3));
31:      }
32:  }

布局:第22行的tabs1.xml

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent">
 6:  
 7:      <TextView android:id="@+id/view1"
 8:          android:background="@drawable/blue"
 9:          android:layout_width="fill_parent"
10:          android:layout_height="fill_parent"
11:          android:text="@string/tabs_1_tab_1"/>
12:  
13:      <TextView android:id="@+id/view2"
14:          android:background="@drawable/red"
15:          android:layout_width="fill_parent"
16:          android:layout_height="fill_parent"
17:          android:text="@string/tabs_1_tab_2"/>
18:  
19:      <TextView android:id="@+id/view3"
20:          android:background="@drawable/green"
21:          android:layout_width="fill_parent"
22:          android:layout_height="fill_parent"
23:          android:text="@string/tabs_1_tab_3"/>
24:  
25:  </FrameLayout>
26:  

72.Tabs2

1

源码:

 1:  import android.app.TabActivity;
 2:  import android.os.Bundle;
 3:  import android.widget.TabHost;
 4:  import android.widget.TextView;
 5:  import android.view.View;
 6:  import com.example.android.apis.R;
 7:   
 8:  /**
 9:   * Example of using a tab content factory for the content via
10:   * {@link TabHost.TabSpec#setContent(android.widget.TabHost.TabContentFactory)}
11:   * 
12:   * It also demonstrates using an icon on one of the tabs via
13:   * {@link TabHost.TabSpec#setIndicator(CharSequence, android.graphics.drawable.Drawable)}
14:   * 
15:   */
16:  public class Tabs2 extends TabActivity implements TabHost.TabContentFactory {
17:   
18:      @Override
19:      protected void onCreate(Bundle savedInstanceState) {
20:          super.onCreate(savedInstanceState);
21:   
22:          final TabHost tabHost = getTabHost();
23:          tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1",
24:                  getResources().getDrawable(R.drawable.star_big_on)).setContent(
25:                  this));
26:          tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2")
27:                  .setContent(this));
28:          tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3")
29:                  .setContent(this));
30:      }
31:   
32:      /** {@inheritDoc} */
33:      public View createTabContent(String tag) {
34:          final TextView tv = new TextView(this);
35:          tv.setText("Content for tab with tag " + tag);
36:          return tv;
37:      }
38:  }

73.Tabs3: 三个Tab布局不一样

1 2 3

源码:

 1:  import android.app.TabActivity;
 2:  import android.os.Bundle;
 3:  import android.widget.TabHost;
 4:  import android.content.Intent;
 5:   
 6:  /**
 7:   * An example of tab content that launches an activity via
 8:   * {@link android.widget.TabHost.TabSpec#setContent(android.content.Intent)}
 9:   */
10:  public class Tabs3 extends TabActivity {
11:   
12:      @Override
13:      protected void onCreate(Bundle savedInstanceState) {
14:          super.onCreate(savedInstanceState);
15:   
16:          final TabHost tabHost = getTabHost();
17:   
18:          tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("list")
19:                  .setContent(new Intent(this, List1.class)));
20:   
21:          tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("photo list")
22:                  .setContent(new Intent(this, List8.class)));
23:   
24:          // This tab sets the intent flag so that it is recreated each time
25:          // the tab is clicked.
26:          tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("destroy")
27:                  .setContent(
28:                          new Intent(this, Controls2.class)
29:                                  .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
30:      }
31:  }

74.TextSwitcher1  点击按钮TextSwitcher会加1

1

布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layout_width="fill_parent"
 5:      android:layout_height="fill_parent"
 6:      android:orientation="vertical">
 7:  
 8:      <Button android:id="@+id/next"
 9:          android:layout_width="wrap_content"
10:          android:layout_height="wrap_content" 
11:          android:text="@string/text_switcher_1_next_text" />
12:  
13:      <TextSwitcher android:id="@+id/switcher"
14:          android:layout_width="fill_parent"
15:          android:layout_height="wrap_content" />
16:  
17:  </LinearLayout>
18:  

源码:

 1:  import com.example.android.apis.R;
 2:   
 3:  import android.app.Activity;
 4:  import android.os.Bundle;
 5:  import android.view.Gravity;
 6:  import android.view.View;
 7:  import android.view.animation.Animation;
 8:  import android.view.animation.AnimationUtils;
 9:  import android.widget.Button;
10:  import android.widget.TextSwitcher;
11:  import android.widget.TextView;
12:  import android.widget.ViewSwitcher;
13:   
14:  /**
15:   * Uses a TextSwitcher.
16:   */
17:  public class TextSwitcher1 extends Activity implements
18:          ViewSwitcher.ViewFactory, View.OnClickListener {
19:   
20:      private TextSwitcher mSwitcher;
21:  
22:      private int mCounter = 0;
23:  
24:      @Override
25:      protected void onCreate(Bundle savedInstanceState) {
26:          super.onCreate(savedInstanceState);
27:  
28:          setContentView(R.layout.text_switcher_1);
29:  
30:          mSwitcher = (TextSwitcher) findViewById(R.id.switcher);
31:          mSwitcher.setFactory(this);
32:  
33:          Animation in = AnimationUtils.loadAnimation(this,
34:                  android.R.anim.fade_in);
35:          Animation out = AnimationUtils.loadAnimation(this,
36:                  android.R.anim.fade_out);
37:          mSwitcher.setInAnimation(in);
38:          mSwitcher.setOutAnimation(out);
39:  
40:          Button nextButton = (Button) findViewById(R.id.next);
41:          nextButton.setOnClickListener(this);
42:  
43:          updateCounter();
44:      }
45:  
46:      public void onClick(View v) {
47:          mCounter++;
48:          updateCounter();
49:      }
50:  
51:      private void updateCounter() {
52:          mSwitcher.setText(String.valueOf(mCounter));
53:      }
54:  
55:      public View makeView() {
56:          TextView t = new TextView(this);
57:          t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
58:          t.setTextSize(36);
59:          return t;
60:      }
61:  }

75.Visibility1

1

布局:

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <!-- Demonstrates changing view visibility. See corresponding Java code. -->
 4:  
 5:  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 6:      android:orientation="vertical"
 7:      android:layout_width="fill_parent"
 8:      android:layout_height="fill_parent">
 9:  
10:      <LinearLayout
11:        android:orientation="vertical"
12:        android:background="@drawable/box"
13:        android:layout_width="fill_parent"
14:        android:layout_height="wrap_content">
15:  
16:        <TextView
17:            android:background="@drawable/red"
18:            android:layout_width="fill_parent"
19:            android:layout_height="wrap_content"
20:            android:text="@string/visibility_1_view_1"/>
21:  
22:        <TextView android:id="@+id/victim"
23:            android:background="@drawable/green"
24:            android:layout_width="fill_parent"
25:            android:layout_height="wrap_content"
26:            android:text="@string/visibility_1_view_2"/>
27:  
28:        <TextView
29:            android:background="@drawable/blue"
30:            android:layout_width="fill_parent"
31:            android:layout_height="wrap_content"
32:            android:text="@string/visibility_1_view_3"/>
33:  
34:      </LinearLayout>
35:  
36:      <LinearLayout
37:          android:orientation="horizontal"
38:          android:layout_width="wrap_content"
39:          android:layout_height="wrap_content">
40:  
41:          <Button android:id="@+id/vis"
42:              android:layout_width="wrap_content"
43:              android:layout_height="wrap_content"
44:              android:text="@string/visibility_1_vis"/>
45:  
46:          <Button android:id="@+id/invis"
47:              android:layout_width="wrap_content"
48:              android:layout_height="wrap_content"
49:              android:text="@string/visibility_1_invis"/>
50:  
51:          <Button android:id="@+id/gone"
52:              android:layout_width="wrap_content"
53:              android:layout_height="wrap_content"
54:              android:text="@string/visibility_1_gone"/>
55:  
56:      </LinearLayout>
57:  </LinearLayout>
58:  

源码:

 1:  import android.app.Activity;
 2:  import android.os.Bundle;
 3:  import android.view.View;
 4:  import android.view.View.OnClickListener;
 5:  import android.widget.Button;
 6:   
 7:  /**
 8:   * Demonstrates making a view VISIBLE, INVISIBLE and GONE
 9:   * 
10:   */
11:  public class Visibility1 extends Activity {
12:   
13:      private View mVictim;
14:   
15:      @Override
16:      protected void onCreate(Bundle savedInstanceState) {
17:          super.onCreate(savedInstanceState);
18:          setContentView(R.layout.visibility_1);
19:   
20:          // Find the view whose visibility will change
21:          mVictim = findViewById(R.id.victim);
22:   
23:          // Find our buttons
24:          Button visibleButton = (Button) findViewById(R.id.vis);
25:          Button invisibleButton = (Button) findViewById(R.id.invis);
26:          Button goneButton = (Button) findViewById(R.id.gone);
27:   
28:          // Wire each button to a click listener
29:          visibleButton.setOnClickListener(mVisibleListener);
30:          invisibleButton.setOnClickListener(mInvisibleListener);
31:          goneButton.setOnClickListener(mGoneListener);
32:      }
33:   
34:      OnClickListener mVisibleListener = new OnClickListener() {
35:          public void onClick(View v) {
36:              mVictim.setVisibility(View.VISIBLE);
37:          }
38:      };
39:   
40:      OnClickListener mInvisibleListener = new OnClickListener() {
41:          public void onClick(View v) {
42:              mVictim.setVisibility(View.INVISIBLE);
43:          }
44:      };
45:   
46:      OnClickListener mGoneListener = new OnClickListener() {
47:          public void onClick(View v) {
48:              mVictim.setVisibility(View.GONE);
49:          }
50:      };
51:  }

76.WebView1

1

布局:10个WebView

 1:  <?xml version="1.0" encoding="utf-8"?>
 2:  
 3:  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 4:      android:layout_width="fill_parent" 
 5:      android:layout_height="wrap_content"
 6:      android:orientation="vertical">
 7:      
 8:      
 9:      <LinearLayout
10:          android:orientation="vertical"
11:          android:layout_width="fill_parent"
12:          android:layout_height="wrap_content">
13:          
14:          <WebView android:id="@+id/wv1"
15:              android:layout_height="wrap_content"
16:              android:layout_width="fill_parent"
17:              />
18:              
19:          <WebView android:id="@+id/wv2"
20:              android:layout_height="wrap_content"
21:              android:layout_width="fill_parent"
22:              />
23:              
24:          <WebView android:id="@+id/wv3"
25:              android:layout_height="wrap_content"
26:              android:layout_width="fill_parent"
27:              />
28:              
29:          <WebView android:id="@+id/wv4"
30:              android:layout_height="wrap_content"
31:              android:layout_width="fill_parent"
32:              />
33:              
34:          <WebView android:id="@+id/wv5"
35:              android:layout_height="wrap_content"
36:              android:layout_width="fill_parent"
37:              />
38:              
39:          <WebView android:id="@+id/wv6"
40:              android:layout_height="wrap_content"
41:              android:layout_width="fill_parent"
42:              />
43:      
44:          <WebView android:id="@+id/wv7"
45:              android:layout_height="wrap_content"
46:              android:layout_width="fill_parent"
47:              />
48:              
49:          <WebView android:id="@+id/wv8"
50:              android:layout_height="wrap_content"
51:              android:layout_width="fill_parent"
52:              />
53:              
54:          <WebView android:id="@+id/wv9"
55:              android:layout_height="wrap_content"
56:              android:layout_width="fill_parent"
57:              />
58:              
59:          <WebView android:id="@+id/wv10"
60:              android:layout_height="wrap_content"
61:              android:layout_width="fill_parent"
62:              />
63:      </LinearLayout>
64:          
65:   </ScrollView>        
66:  

源码:

 1:  import android.app.Activity;
 2:  import android.os.Bundle;
 3:  import android.webkit.WebView;
 4:   
 5:  import com.example.android.apis.R;
 6:   
 7:   
 8:  /**
 9:   * Sample creating 10 webviews.
10:   */
11:  public class WebView1 extends Activity {
12:   
13:      @Override
14:      public void onCreate(Bundle icicle) {
15:          super.onCreate(icicle);
16:   
17:          setContentView(R.layout.webview_1);
18:   
19:          final String mimeType = "text/html";
20:          final String encoding = "utf-8";
21:   
22:          WebView wv;
23:   
24:          wv = (WebView) findViewById(R.id.wv1);
25:          wv.loadData("<a href='x'>Hello World! - 1</a>", mimeType, encoding);
26:          
27:          wv = (WebView) findViewById(R.id.wv2);
28:          wv.loadData("<a href='x'>Hello World! - 2</a>", mimeType, encoding);
29:          
30:          wv = (WebView) findViewById(R.id.wv3);
31:          wv.loadData("<a href='x'>Hello World! - 3</a>", mimeType, encoding);
32:          
33:          wv = (WebView) findViewById(R.id.wv4);
34:          wv.loadData("<a href='x'>Hello World! - 4</a>", mimeType, encoding);
35:          
36:          wv = (WebView) findViewById(R.id.wv5);
37:          wv.loadData("<a href='x'>Hello World! - 5</a>", mimeType, encoding);
38:          
39:          wv = (WebView) findViewById(R.id.wv6);
40:          wv.loadData("<a href='x'>Hello World! - 6</a>", mimeType, encoding);
41:          
42:          wv = (WebView) findViewById(R.id.wv7);
43:          wv.loadData("<a href='x'>Hello World! - 7</a>", mimeType, encoding);
44:          
45:          wv = (WebView) findViewById(R.id.wv8);
46:          wv.loadData("<a href='x'>Hello World! - 8</a>", mimeType, encoding);
47:          
48:          wv = (WebView) findViewById(R.id.wv9);
49:          wv.loadData("<a href='x'>Hello World! - 9</a>", mimeType, encoding);
50:          
51:          wv = (WebView) findViewById(R.id.wv10);
52:          wv.loadData("<a href='x'>Hello World! - 10</a>", mimeType, encoding);
53:      }
54:  }
  • 0
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值