<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:src="@drawable/bigpicture"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scaleType="center"/>
</ScrollView>
</HorizontalScrollView>
2012年5月22日星期二
使用 HorizontalScrollView 和 ScrollView 顯示大圖
我們可以使用 HorizontalScrollView 和 ScrollView 顯示比屏幕大的圖像.
2012年5月18日星期五
蜂巢(Honeycomb)的對話片段(DialogFragment)
來到 Android 3, 蜂巢(Honeycomb), 為支持應用程序中的多個活動間(multiple activities)的UI和邏輯重用, showDialog()和dismissDialog()方法被棄用, 取而代之的是對話片段(DialogFragment).
實現話片段(DialogFragment), 先創建它的佈局文件和擴展 DialogFragment 類.
實現話片段(DialogFragment)的佈局文件, /res/layout/dialogfragments.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="I'm Dialog Fragment" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
創建擴展 DialogFragment 的類, MyDialogFragment.java.
package com.Android3DialogFragments;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MyDialogFragment extends DialogFragment {
public MyDialogFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myDialogFragmentView = inflater.inflate(R.layout.dialogfragments, container);
getDialog().setTitle("MyDialogFragment");
return myDialogFragmentView;
}
}
修改主佈局main.xml, 添加一個按鈕打開對話片段.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/opendialogfragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Dialog Fragment" />
</LinearLayout>
主活動的Java代碼
package com.Android3DialogFragments;
import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Android3DialogFragmentsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button openDialogFragment = (Button)findViewById(R.id.opendialogfragment);
openDialogFragment.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
openMyDialogFragment();
}});
}
private void openMyDialogFragment(){
FragmentManager fragmentManager = getFragmentManager();
MyDialogFragment myDialogFragment = new MyDialogFragment();
myDialogFragment.show(fragmentManager, "tag_myDialogFragment");
}
}
2012年5月13日星期日
Android 4, Ice Cream Sandwich (ICS), 的網格佈局(GridLayout)
Android 4, Ice Cream Sandwich (ICS) API Level 14, 提供新的的網格佈局(GridLayout). 注意, 網格佈局(GridLayout)不同於網格視圖(GridView). 下面是一個網格佈局的簡單例子.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<GridLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:useDefaultMargins="true"
android:columnCount="4"
android:rowCount="3"
>
<TextView
android:background="@android:color/background_light"
android:text="A"/>
<TextView
android:layout_column="1"
android:layout_row="0"
android:background="@android:color/background_light"
android:text="B"/>
<ImageView
android:layout_column="2"
android:layout_row="0"
android:background="@android:color/background_light"
android:src="@drawable/ic_launcher"/>
<TextView
android:layout_column="3"
android:layout_row="0"
android:background="@android:color/background_light"
android:text="D"/>
<TextView
android:layout_column="1"
android:layout_row="1"
android:text="F"/>
<TextView
android:text="G"/>
<TextView
android:text="H"/>
<Button
android:layout_columnSpan="3"
android:text="I, J, K"/>
<TextView
android:text="L"/>
</GridLayout>
</LinearLayout>
Android Developers Blog上有一編講解網格佈局很好的文章.
2012年4月19日星期四
Android 3.0 的彈出菜單(PopupMenu)
Android 3.0, API Level 11, 的彈出菜單(PopupMenu)在一個模態的彈出窗口(modal popup window)之上顯示菜單.
實例:

創建/res/menu/popupmenu.xml文件, 定義彈出菜單(PopupMenu)的佈局.
修改 main.xml 添加一個按鈕啟動彈出菜單.
主Java代碼.
實例:

創建/res/menu/popupmenu.xml文件, 定義彈出菜單(PopupMenu)的佈局.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/popupmenu">
<item android:id="@+id/menu1"
android:title="item 1"/>
<item android:id="@+id/menu2"
android:title="item 2"/>
<item android:id="@+id/menu3"
android:title="item 3"/>
</group>
</menu>
修改 main.xml 添加一個按鈕啟動彈出菜單.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/startpopupmenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start PopupMenu"
/>
</LinearLayout>
主Java代碼.
package com.Android3PopupMenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupMenu;
public class Android3PopupMenuActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonPopupMenu = (Button)findViewById(R.id.startpopupmenu);
buttonPopupMenu.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
PopupMenu popupMenu = new PopupMenu(Android3PopupMenuActivity.this, view);
popupMenu.getMenuInflater().inflate(R.menu.popupmenu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// Do something...
return true;
}
});
popupMenu.show();
}});
}
}
2012年4月11日星期三
彈出視窗(PopupWindow)
彈出視窗(PopupWindow)就像是一個浮動在主屏幕之上的視窗.
實例:

修改main.xml, 添加一個按鈕用來打開彈出視窗(PopupWindow).
主要的Java代碼.
創建/res/layout/popup.xml文件, 定義彈出視窗的佈局.
實例:

修改main.xml, 添加一個按鈕用來打開彈出視窗(PopupWindow).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/openpopupwindow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Open PopupWindow" />
</LinearLayout>
主要的Java代碼.
package com.PopupWindow;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.PopupWindow;
public class PopupWindowActivity extends Activity {
Button buttonOpen;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonOpen = (Button)findViewById(R.id.openpopupwindow);
buttonOpen.setOnClickListener(buttonOpenOnClickListener);
}
Button.OnClickListener buttonOpenOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View view) {
openPopupWindow(view);
}};
private void openPopupWindow(View v){
LayoutInflater layoutInflater = (LayoutInflater)getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
Button buttonClose = (Button)popupView.findViewById(R.id.closepopupwindow);
buttonClose.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popupWindow.dismiss();
}});
popupWindow.showAsDropDown(buttonOpen);
popupWindow.setFocusable(true);
popupWindow.update();
}
}
創建/res/layout/popup.xml文件, 定義彈出視窗的佈局.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#000055">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PopupWindow" />
<Button
android:id="@+id/closepopupwindow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />
</LinearLayout>
2012年4月7日星期六
使用managedQuery()獲取Android設備的視頻媒體內容
本程序演示如何使用managedQuery()方法, 從媒體存儲(MediaStore)獲取Android設備的視頻媒體內容. 把Uri設定為 MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 排序設定為 MediaStore.Video.Media.TITLE.


package com.AndroidMediaList;
import android.app.ListActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
public class AndroidMediaListActivity extends ListActivity {
//For Video
Uri targetUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String sortOrder = MediaStore.Video.Media.TITLE;
//For Audio
//Uri targetUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//String sortOrder = MediaStore.Audio.Media.TITLE;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = {MediaStore.MediaColumns.TITLE};
int[] to = {android.R.id.text1};
Cursor cursor = managedQuery(targetUri, null, null, null, sortOrder);
ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);
setListAdapter(adapter);
}
}
2012年4月5日星期四
獲取Android設備的音樂媒體內容
本程序演示如何使用managedQuery()方法從媒體存儲(MediaStore)獲取Android設備的音樂媒體內容. 把Uri設定為 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 排序設定為 MediaStore.Audio.Media.TITLE.


package com.AndroidMediaList;
import android.app.ListActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
public class AndroidMediaListActivity extends ListActivity {
Uri targetUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = {MediaStore.MediaColumns.TITLE};
int[] to = {android.R.id.text1};
Cursor cursor = managedQuery(targetUri, null, null, null, MediaStore.Audio.Media.TITLE);
ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);
setListAdapter(adapter);
}
}
訂閱:
文章 (Atom)

