一個Activity掌握Android4.0新控件
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380
谷歌在推出Android4.0的同時推出了一些新控件,Android4.0中最常用的新控件有下面5種。

1. Switch的使用
Switch顧名思義,就是開關(guān)的意思,有開和關(guān)兩種狀態(tài)。
當(dāng)Switch處于關(guān)閉狀態(tài)時:

當(dāng)Switch處于打開狀態(tài)時:

怎么在定義xml中定義Switch
<Switch
android:id="@+id/_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOff="關(guān)閉"
android:textOn="打開" />
- <code>android:textOff</code>屬性表示Switch關(guān)閉時顯示的文本
- <code>android:textOn</code>屬性表示Switch打開時顯示的文本
怎么監(jiān)聽Switch的關(guān)閉,打開這兩個狀態(tài)的變化
mSwitch= (Switch) findViewById(R.id._switch);
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
Log.i("Switch","打開Switch");
}else{
Log.i("Switch","關(guān)閉Switch");
}
}
});
2. Space的使用
Space顧名思義是空間的意思,表示該控件占據(jù)一定的空間,但是卻不顯示任何東西。
怎么使用Space
<android.support.v4.widget.Space
android:layout_width="match_parent"
android:layout_height="60dp" />
3. GridLayout的使用
GridLayout是指網(wǎng)格布局,GridLayout是為了彌補(bǔ)TableLayout的一些不足而推出來的。
- TableLayout不能同時在水平和垂直兩個方向上對齊,因?yàn)門ableLayout繼承LinearLayout。
- TableLayout中的元素不能跨行或者跨列,因?yàn)門ableLayout不能明確指出占多少行和多少列。
GridLayout中元素常用的屬性
- android:layout_row : 固定顯示在第幾行。
- android:layout_column : 固定顯示在第幾列
- android:layout_rowSpan : 跨幾行
- android:layout_columnSpan: 跨幾列
怎么使用GridLayout
<GridLayout
android:id="@+id/grid_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="2"
android:rowCount="2">
<Button android:text="打開PopupMenu"
android:onClick="openPopupMenu"/>
<Button android:text="TextureView不旋轉(zhuǎn)"
android:onClick="rotate0"/>
<Button android:text="TextureView旋轉(zhuǎn)45度"
android:onClick="rotate45"/>
<Button android:text="TextureView旋轉(zhuǎn)90度"
android:onClick="rotate90"/>
</GridLayout>
4. PopupMenu的使用
PopupMenu顧名思義是彈出菜單,它可以在一個控件的下面顯示彈出菜單。
在xml中定義彈出菜單
在menu資源目錄下面新建一個菜單的xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<item android:title="Switch" />
<item android:title="Space" />
<item android:title="GridLayout" />
<item android:title="PopupMenu" />
<item android:title="TextureView" />
</menu>
怎么顯示PopupMenu
public void openPopupMenu(View view){
//popupMenu顯示在view下面
PopupMenu popupMenu=new PopupMenu(this,view);
//從xml文件中加載菜單到popupMenu中
popupMenu.inflate(R.menu.popup_menu);
//顯示 popupMenu
popupMenu.show();
}
5. TextureView的使用
TextureView是SurfaceView的補(bǔ)充,它不像SurfaceView一樣創(chuàng)建特殊的窗口,它創(chuàng)建一個常規(guī)的View,TextureView可以設(shè)置移動,旋轉(zhuǎn),動畫等。
一個Textureview可以用來顯示內(nèi)容流。這樣的內(nèi)容流可以是視頻或OpenGL場景。內(nèi)容流可以來自于應(yīng)用程序的進(jìn)程以及遠(yuǎn)程進(jìn)程。Textureview只能用于硬件加速的窗口。當(dāng)渲染軟件,Textureview什么都不會畫。
怎么使用TextureView
使用Textureview很簡單:你需要做的就是得到它的SurfaceTexture。然后,SurfaceTexture可用于呈現(xiàn)內(nèi)容。
下面的示例演示如何渲染相機(jī)預(yù)覽到Textureview:
因?yàn)槭褂昧讼鄼C(jī),所以要在添加AndroidManifest.xml 文件中添加對應(yīng)的權(quán)限
<uses-permission android:name="android.permission.CAMERA"/>
public class MainActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener{
private TextureView mTexture;
private Camera mCamera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTexture= (TextureView) findViewById(R.id.texture_view);
//為mTexture設(shè)置表面結(jié)構(gòu)監(jiān)聽器
mTexture.setSurfaceTextureListener(this);
}
/**
* TextureView的SurfaceTexture準(zhǔn)備開始用
*/
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mCamera = Camera.open();
try {
//設(shè)置mCamera的表面結(jié)構(gòu)為surface
mCamera.setPreviewTexture(surface);
//啟動相機(jī)預(yù)覽
mCamera.startPreview();
//設(shè)置mTexture透明度
mTexture.setAlpha(1.0f);
//設(shè)置mTexture旋轉(zhuǎn)角度
mTexture.setRotation(90.0f);
} catch (IOException ioe) {
// Something bad happened
}
}
/**
* SurfaceTexture的緩存大小改變了
*/
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
/**
* SurfaceTexture銷毀了
*/
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.stopPreview();
mCamera.release();
return true;
}
/**
* SurfaceTexture更新了
*/
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
}
xml文件中TextureView是這樣定義的
<TextureView
android:id="@+id/texture_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</TextureView>
注意:TextureView設(shè)置旋轉(zhuǎn)90度才是我們的正常視角。
6. 一個Activity掌握Android4.0新控件
為了方便學(xué)習(xí),本人將這5個新控件放到一個Activity中進(jìn)行使用。
- 程序原始界面講解
- 打開Switch開關(guān),點(diǎn)擊“打開POPUPMENU”彈出PopupMenu
- 下面分別是TextureView旋轉(zhuǎn)0度(即不旋轉(zhuǎn)),旋轉(zhuǎn)45度,旋轉(zhuǎn)90度三種情況講解
本程序源代碼下載一個Activity掌握Android4.0新控件




