代码:
1 |
EditText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); |
说明:通过这一代码,可以使相应的 EditText 在设备切换至横屏模式时不启用输入法的全屏模式。注意,横屏模式时若不启用全屏输入界面,在有些设备上可能会造成一定的性能下降。
我可能前进得不快,但我决不后退
代码:
1 |
EditText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); |
说明:通过这一代码,可以使相应的 EditText 在设备切换至横屏模式时不启用输入法的全屏模式。注意,横屏模式时若不启用全屏输入界面,在有些设备上可能会造成一定的性能下降。
代码与范例:
1 2 3 4 5 6 7 8 9 10 11 |
<CheckBoxPreference android:title="Pref1" android:key="pref1"> </ CheckBoxPreference> <EditTextPreference android:dialogMessage="Pref 2 dialog" android:title="Pref2" android:key="pref2" android:dependency="pref1"> </ EditTextPreference> |
说明:通过 dependency 属性设置,可以使 Preference 项 pref2 与 pref1 之间建立起关联性。当 CheckBox 类型的 pref1 项值为 false 时,pref2 将不可用,并被以灰色显示。
代码与范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mViewPager.setOnPageChangeListener (new OnPageChangeListener() { @Override public void onPageSelected(int position) { // 下标为 position 的页面已完成装载时将调用此方法 } @Override public void onPageScrollStateChanged(int state) { // 当页面的状态改变时将调用此方法 if (state ==ViewPager.SCROLL_STATE_IDLE) { // 未拖动页面时执行此处 } else if (state ==ViewPager.SCROLL_STATE_DRAGGING) { // 正在拖动页面时执行此处 } } }); |
说明:ViewPager 可以通过以上两个方法来获取其状态并作出相应的处理。
代码与范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 分享图片 Intent intent1 = new Intent(Intent.ACTION_SEND); File file = new File(imageUri); intent1.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); intent1.setType("image/jpeg"); startActivity(Intent1.createChooser(intent1,getString(R.string.share))); Intent intent2=new Intent(Intent.ACTION_SEND); intent2.putExtra(Intent.EXTRA_SUBJECT,data.get(mPosition).getTitle()); intent2.putExtra(Intent.EXTRA_TEXT, data.get(mPosition).getText()); intent2.setType("text/plain"); intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent2.createChooser(intent2, getString(R.string.share))); |
说明:该意图中包含了所要分享的内容的信息。通过该意图可以或许能够处理该意图的应用列表。
代码与范例:
1 2 3 4 5 6 |
Random random = new Random(100);// 100 为生成随机数所用的种子,也可省略 int randomint = random.nextInt(); float randomfloat = random.nextFloat(); long randomlong = random.nextLong(); boolean randomboolean = random.nextBoolean(); randomint = Math.abs(random.nextInt())%10 // 通过求模获得一个给定范围内的正随机数 |
说明:通过 Random 类及其相关方法获得随机变量。
代码:
Java 部分
1 |
list.setItemsCanFocus(false); |
XML 部分
android:focusable=”false”
android:focusableInTouchMode=”false”
说明:如果一个 ListView 的条目子视图中包含了 CheckBox、ImagaButton 等可以接收触控监听的控件的话,它们可能会遮断 ListView 本身对条目点击的监听,使得其 setOnItemClickListener() 方法失效。解决方法为,如果是在代码中动态生成的空间,可以用 setItemsCanFocus() 方法来禁用那些控件获取焦点。如果实在 XML 文件中定义的控件,则应该在 XML 文件添加相应元素属性以增加禁止获取焦点的。
XML 和 HTML 中都有一些特殊的字符,这些字符在 XML 和 HTML 中是不能直接使用的,如果必须使用这些字符,应该使用其对应的转义字符。
XML 常用转义字符:
字符 |
转义字符 |
描述 |
& |
& |
和 |
< |
< |
小于号 |
> |
> |
大于号 |
“ |
" |
双引号 |
‘ |
' |
单引号 |
HTML 常用转义字符:
字符 |
转义字符 |
描述 |
& |
& | 和 |
< |
< | 小于号 |
> |
> | 大于号 |
“ |
" | 双引号 |
|
| 空格 |
© |
© | 版权符 |
® |
® | 注册符 |
说明:转义字符应以“&”开头,以“;”结尾。本篇系完整转载自大豆男生的博客文章。
代码与范例:
字符串数组
XML
1 2 3 4 5 |
<string-array name="sample_names"> <item>foo</item> <item>bar</item> <item>baz</item> </string-array> |
JAVA
1 |
String[] names = getResources().getStringArray(R.array.sample_names); |
整形数组
XML
1 2 3 4 5 |
<integer-array name="sample_ids"> <item>1</item> <item>2</item> <item>3</item> </integer-array> |
JAVA
1 |
int[] ids = getResources().getStringArray(R.array.sample_ids); |
Drawable 数组
XML
1 2 3 4 5 |
<array name="sample_images"> <item>@drawable/title</item> <item>@drawable/logo</item> <item>@drawable/icon</item> </array> |
JAVA
1 2 |
TypedArray images = getResources().obtainTypedArray(R.array.sample_images); Drawable drawable = images.getDrawable(0); |
Color 数组
XML
1 2 3 4 5 |
<array name="sample_colors"> <item>#FFFF0000</item> <item>#FF00FF00</item> <item>#FF0000FF</item> </array> |
JAVA
1 2 |
TypedArray colors = getResources().obtainTypedArray(R.array.sample_colors); int color = colors.getColor(0,0);// 参数分别为下标 |
说明:Android 可以通过 xml 格式的资源文件来声明与定义各种类型的数组。这样做的好处包括可以根据不同语言/硬件规格等条件分配不同的数组。
Mainfest 文件代码:
<activity android:name=”.IntentReceiver” >
<intent-filter>
<action android:name=”android.intent.action.SEND” />
<category android:name=”android.intent.category.DEFAULT” />
<data android:mimeType=”image/*” />
</intent-filter>
<intent-filter>
<action android:name=”android.intent.action.SEND” />
<category android:name=”android.intent.category.DEFAULT” />
<data android:mimeType=”text/plain” />
</intent-filter>
<intent-filter>
<action android:name=”android.intent.action.SEND_MULTIPLE” />
<category android:name=”android.intent.category.DEFAULT” />
<data android:mimeType=”image/*” />
</intent-filter>
</activity>
范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
void onCreate (Bundle savedInstanceState) { ... // 获取 intent、 action 以及 MIME 类型,这些是一个意图的主要内容 Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // 处理收到的文本 } else if (type.startsWith("image/")) { handleSendImage(intent); // 处理收到的图像 } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // 处理收到的多个图像 } } else { // 还可以添加其他类型意图的处理 } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // 更新 UI 来反映收到的内容 } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // 更新 UI 来反映收到的内容 } } void handleSendMultipleImages(Intent intent) { ArrayList imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // 更新 UI 来反映收到的内容 } } |
说明:通过在 Manifest 文件中声明相应的意图过滤器,就可以接收来自其他应用的数据以供在自己的应用中进行处理。
代码与范例:
启动活动的情况
1 2 3 4 5 6 7 8 |
public class StartupReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent activityIntent = new Intent(context, StartupActivity.class); activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(activityIntent); } } |
启动服务的情况
1 2 3 4 5 6 7 |
public class StartupReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(context, StartupService.class); context.startService(serviceIntent); } } |
Manifest文件
……
<uses-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED” >
</uses-permission>
……
<application >
……
<receiver android:name=”.StartupReceiver” >
<intent-filter>
<action android:name=”android.intent.action.BOOT_COMPLETED” />
</intent-filter>
</receiver>
</application>
……
说明:通过 Intent 和 BroadcastReceiver 来实现系统启动后自动执行程序。需要在Manifest中注册该 BroadcastReceiver 并声明相应的权限。StartupReceiver 应当作为单独的类存在,而不能被包含在,例如,一个 Activity 类内部。这种情况下将无法接受到广播。更多的意图请参见官方文档。