Android 中 ViewPager 状态的判定方法

代码与范例:

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 可以通过以上两个方法来获取其状态并作出相应的处理。

Android 中分享内容至其他应用

代码与范例:

// 分享图片
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)));

说明:该意图中包含了所要分享的内容的信息。通过该意图可以或许能够处理该意图的应用列表。

Java 中获取随机数的方法

代码与范例:

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 类及其相关方法获得随机变量。

Android 中解决 ListView 等视图 setOnItemClickListener() 方法失效的问题

代码:

Java 部分

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 常用转义字符:

字符

转义字符

描述

&

&

和

<

&lt;

小于号

>

&gt;

大于号

“

&quot;

双引号

‘

&apos;

单引号

HTML 常用转义字符:

字符

转义字符

描述

&

&amp; 和

<

&lt; 小于号

>

&gt; 大于号

“

&quot; 双引号

&nbsp; 空格

©

&copy; 版权符

®

&reg; 注册符

说明:转义字符应以“&”开头,以“;”结尾。本篇系完整转载自大豆男生的博客文章。

Android中通过xml资源文件定义数组

代码与范例:

字符串数组
XML

<string-array name="sample_names">
	<item>foo</item>
	<item>bar</item>
	<item>baz</item>
</string-array>

JAVA

String[] names = getResources().getStringArray(R.array.sample_names);

整形数组
XML

<integer-array name="sample_ids">
	<item>1</item>
	<item>2</item>
	<item>3</item>
</integer-array>

JAVA

int[] ids = getResources().getStringArray(R.array.sample_ids);

Drawable 数组
XML

<array name="sample_images">
	<item>@drawable/title</item>
	<item>@drawable/logo</item>
	<item>@drawable/icon</item>
</array>

JAVA

TypedArray images = getResources().obtainTypedArray(R.array.sample_images);
Drawable drawable = images.getDrawable(0);

Color 数组
XML

<array name="sample_colors">
	<item>#FFFF0000</item>
	<item>#FF00FF00</item>
	<item>#FF0000FF</item>
</array>

JAVA

TypedArray colors = getResources().obtainTypedArray(R.array.sample_colors);
int color = colors.getColor(0,0);// 参数分别为下标

说明:Android 可以通过 xml 格式的资源文件来声明与定义各种类型的数组。这样做的好处包括可以根据不同语言/硬件规格等条件分配不同的数组。

Android中接受来自其他应用的内容

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>

范例:

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 文件中声明相应的意图过滤器,就可以接收来自其他应用的数据以供在自己的应用中进行处理。

Android中在系统启动完成时自动运行程序

代码与范例:

启动活动的情况

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);
    }  
}

启动服务的情况

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 类内部。这种情况下将无法接受到广播。更多的意图请参见官方文档。

Android中在通知栏内常驻应用程序消息

代码与范例:

// 添加常驻通知
private void setNotification() {
    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.icon, getString(R.string.app_name), System.currentTimeMillis());
    Intent intent = new Intent(this, Sample.class);
    notification.flags = Notification.FLAG_ONGOING_EVENT; // 设置常驻 Flag
    PendingIntent contextIntent = PendingIntent.getActivity(this, 0, intent, 0);
    notification.setLatestEventInfo(getApplicationContext(), getString(R.string.app_name), getString(R.string.information), contextIntent);
    notificationManager.notify(R.string.app_name, notification);
}

// 取消通知
private void cancelNotification() {
    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    notificationManager.cancel(R.string.app_name);
}

说明:通过 setNotification() 可以在通知栏中添加一条常驻通知,通过 cancelNotification() 取消该通知。