`
lautherf
  • 浏览: 14965 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

android 2.2 apidemos 赏析笔记 2

 
阅读更多
PACKAGE: com.example.android.apis.app
CustomDialogActivity.java
SEE:
1.custom_dialog_activity.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/custom_dialog_activity_text"/>
2.AndroidManifest.xml
        <activity android:name=".app.CustomDialogActivity"
                android:label="@string/activity_custom_dialog"
                android:theme="@style/Theme.CustomDialog">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.SAMPLE_CODE" />
            </intent-filter>
        </activity>
3.values.styles.xml
    <style name="Theme.CustomDialog" parent="android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/filled_box</item>
    </style>
4.drawable.fill_box.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#f0600000"/>
    <stroke android:width="3dp" color="#ffff8080"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
</shape>
SO:很是纠结的一个设置呀,解耦解成这样不容易呀。

CustomTitle.java

SEE:
1.onCreate()
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);
2.layout.custom_title_1.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView android:id="@+id/left_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="@string/custom_title_left" />
    <TextView android:id="@+id/right_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="@string/custom_title_right" />
</RelativeLayout>

SO:
设置标题栏样式的方法。。。

DialogActivity.java
SEE:
1.onCreate()  =>
        requestWindowFeature(Window.FEATURE_LEFT_ICON);
        getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,
                android.R.drawable.ic_dialog_alert);
SO:
设置那个感叹号的方法。。。 真短。。其他应该同CUSTOM_DIALOG


Forwarding.java
SEE:
1.onClick()  =>
            Intent intent = new Intent();
            intent.setClass(Forwarding.this, ForwardTarget.class);
            startActivity(intent);
            finish();
SO:
只要finish()掉这个activity,就不会呆在栈上了。。回来也见不到他了。。


HelloWorld.java

无视。。
SEE:
1.res.value.string.xml
    <string name="hello_world"><b>Hello, <i>World!</i></b></string>
SO:
这里可以设置格式。。。


PersistentState.java

SEE:
1.save_restore_state.xml
    <EditText android:id="@+id/saved"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/green"
        android:text="@string/initial_text"
        android:freezesText="true">
        <requestFocus />
    </EditText>
2.onResume()
        SharedPreferences prefs = getPreferences(0);
        String restoredText = prefs.getString("text", null);
        if (restoredText != null) {
            mSaved.setText(restoredText, TextView.BufferType.EDITABLE);

            int selectionStart = prefs.getInt("selection-start", -1);
            int selectionEnd = prefs.getInt("selection-end", -1);
            if (selectionStart != -1 && selectionEnd != -1) {
                mSaved.setSelection(selectionStart, selectionEnd);
            }
        }
3.onPause()
        SharedPreferences.Editor editor = getPreferences(0).edit();
        editor.putString("text", mSaved.getText().toString());
        editor.putInt("selection-start", mSaved.getSelectionStart());
        editor.putInt("selection-end", mSaved.getSelectionEnd());
        editor.commit();
SO:
见sharePreferences的保存方式~。。。 这个还可以保存选择文字 的开始点和结束点
=========================END


QuickContactsDemo.JAVA
SEE:
1.QuickContactsDemo.java
    static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
            Contacts._ID, // 0
            Contacts.DISPLAY_NAME, // 1
            Contacts.STARRED, // 2
            Contacts.TIMES_CONTACTED, // 3
            Contacts.CONTACT_PRESENCE, // 4
            Contacts.PHOTO_ID, // 5
            Contacts.LOOKUP_KEY, // 6
            Contacts.HAS_PHONE_NUMBER, // 7
    };
2.onCreate()
        String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
                + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
                + Contacts.DISPLAY_NAME + " != '' ))";
        Cursor c =
                getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,
                null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
SO:
获得了联系人的表,需要什么参数什么条件再改。。。


SEE:
1.startManagingCursor(c);
SO:
startManagingCursor(Cursor c)
This method allows the activity to take care of managing the given Cursor's lifecycle for you based on the activity's lifecycle.

SEE:
1.   
final ContactListItemCache cache = (ContactListItemCache) view.getTag();
2.
    final static class ContactListItemCache {
        public TextView nameView;
        public QuickContactBadge photoView;
        public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
    }
3.
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            View view = super.newView(context, cursor, parent);
            ContactListItemCache cache = new ContactListItemCache();
            cache.nameView = (TextView) view.findViewById(R.id.name);
            cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge);
            view.setTag(cache);

            return view;
        }
SO:
getTag () returns the Object stored in this view as a tag将某个对象作为tag保存在view中。。 在newView中进行tag和View的绑定。隐藏view的细节。。。设置的时候不用一直findViewById了

SEE:
1.bindView()
SO:
abstract void  bindView () Bind an existing view to the data pointed to by cursor


SEE:
1.bindView()
            final ContactListItemCache cache = (ContactListItemCache) view.getTag();
            TextView nameView = cache.nameView;
            QuickContactBadge photoView = cache.photoView;
            // Set the name
            cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer);
            int size = cache.nameBuffer.sizeCopied;
            cache.nameView.setText(cache.nameBuffer.data, 0, size);
            final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
            final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
            cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));
SO:
cursor的取值操作,绑定View的tag的设置工作。。

SEE:
1.
        ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.quick_contacts, c);
2.
layout.quick_contacts.xml
SO:看看就好 adapter的每一项的布局。。

ReseiveResult.java
SEE:
1.onClick()
            Intent intent = new Intent(ReceiveResult.this, SendResult.class);
            startActivityForResult(intent, GET_CODE);
2.
protected void onActivityResult(int requestCode, int resultCode,
Intent data)
SO:
开始一个Activity来接收result

SEE:  SendResult.java
1.
            setResult(RESULT_OK, (new Intent()).setAction("Corky!"));
            finish();
SO:
返回 ok 并带回一个结果。。。。 居然以ACTION的形式传回来。。 而不是intent.putExtra,懒呀 懒呀。


RedirectMain.java
SEE:
1.RedirectEnter.java
            Intent intent = new Intent(RedirectEnter.this, RedirectMain.class);
            startActivity(intent);
2.RedirectMain.java
        if (!loadPrefs()) {
            Intent intent = new Intent(this, RedirectGetter.class);
            startActivityForResult(intent, INIT_TEXT_REQUEST);
        }
...
            if (resultCode == RESULT_CANCELED) {
                finish();
SO:
进来无数据就跳走,返回为CANCELLED就finish();这个逻辑真纠结。

SEE:
1.RedirectGetter.java
            SharedPreferences preferences = getSharedPreferences("RedirectData", 0);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("text", mText.getText().toString());

            if (editor.commit()) {
                setResult(RESULT_OK);
            }
SO:
在复习一次sharedPreferences保存方法。


ReorderOnLaunch.java

SEE:
1.ReorderFour.java
            Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(intent);
SO:
如果栈中有这个Activity则放到最前端。点了N多下之后,如果返回的话,会发现second只有一个。。。因为总是被带到前端来,而不是重新创建一个实例。。 singletask ?


SaveRestoreState.java
1.
    /**
     * Retrieve the text that is currently in the "saved" editor.
     */
    CharSequence getSavedText() {
        return ((EditText)findViewById(R.id.saved)).getText();
    }

    /**
     * Change the text that is currently in the "saved" editor.
     */
    void setSavedText(CharSequence text) {
        ((EditText)findViewById(R.id.saved)).setText(text);
    }
2.
    <EditText android:id="@+id/saved"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/green"
        android:text="@string/initial_text"
        android:freezesText="true">
        <requestFocus />
    </EditText>
SO:
横竖屏的切换实际上是销毁一个ACTIVITY并创建另一个ACTIVITY,当然不能保存EditText里的数据,根据一个属性  android:freezesText="true" 两个方法getSavedText() setSavedText() 就能保存里面的数据。



SetWallpaperActivity.java

SEE:
1.layout.wallpaper.xml
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageview" />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
SO:
这样布局就有背景与按钮两层了。。。 FrameLayout原来以为很废物的。。

SEE:
1.onCreate()
        final WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
        final Drawable wallpaperDrawable = wallpaperManager.getDrawable();
        final ImageView imageView = (ImageView) findViewById(R.id.imageview);
        imageView.setDrawingCacheEnabled(true);
        imageView.setImageDrawable(wallpaperDrawable);
SO:
获取WallpaperManager 然后又获取 Drawable 然后就可以获取壁纸了。

SEE:
1.
                int mColor = (int) Math.floor(Math.random() * mColors.length);
                wallpaperDrawable.setColorFilter(mColors[mColor], PorterDuff.Mode.MULTIPLY);
                imageView.setImageDrawable(wallpaperDrawable);
                imageView.invalidate();
SO:
设置一个Drawable的ColorFilter就可以有滤镜的效果。。。待研究

SEE:
1.
                    wallpaperManager.setBitmap(imageView.getDrawingCache());
2.        imageView.setDrawingCacheEnabled(true);
SO:获取View的DrawingCache,输出到WallpaperManager成壁纸。应该也可以输出到别的地方吧,把一个view的DrawingCache来做变换效果。根view的难道可以实现截屏?。。MARK


TranslucentActivity.java

SEE:
1.AndroidManifest.xml
        <activity android:name=".app.TranslucentActivity"
                android:label="@string/activity_translucent"
                android:theme="@style/Theme.Translucent">
2.values.styles.xml
    <style name="Theme.Translucent" parent="android:style/Theme.Translucent">
        <item name="android:windowBackground">@drawable/translucent_background</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:colorForeground">#fff</item>
    </style>
SO:
将android:windowBackground设置为@drawable/translucent_background应该就可以了吧

TranslucentBlueActivity.java
SEE:
1.onCreate()
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
                WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
SO:
背景模糊效果~


WallpaperActivity.java

SEE
1.values.style.xml
    <style name="Theme.Wallpaper" parent="android:style/Theme.Wallpaper">
        <item name="android:colorForeground">#fff</item>
    </style>
SO:不是Theme.Translucent而已。。。
==========================终于完了







分享到:
评论

相关推荐

    Android2.2 ApiDemos

    《Android 2.2 ApiDemos深度解析》 在Android开发领域,ApiDemos是一个非常重要的参考资料,它是由Google官方提供的一个示例程序,包含了Android SDK中的各种API功能的演示。这个项目,针对的是Android 2.2(API...

    Android6.0 Api Demos

    **Android 6.0 API Demos详解** Android 6.0 API Demos 是一个官方提供的示例代码集合,它展示了Android 6.0 (Marshmallow) SDK中的各种API功能和用法。这些示例旨在帮助开发者更好地理解和学习如何在实际应用中...

    android的ApiDemos

    API Demos 是 Google 为了 Android 开发者所提供的一个 Android API 合集,其中包含了很多的 API 范例,同时遵循了良好的代码规范,是一个值得开发者研究和学习的典型。android的ApiDemos,需要解压缩后使用。

    最新Android apidemos

    《深入探索Android API Demos:最新实践与技术解析》 Android API Demos是Google官方提供的一款用于展示Android SDK中各种API功能和用法的应用程序,它涵盖了从基础控件到高级特性的全方位示例,是开发者学习...

    android1.6 apiDemos

    《Android 1.6 API Demos深度解析》 在Android开发的世界中,API Demos是一个不可或缺的学习资源,它为开发者提供了丰富的示例代码,帮助理解并掌握Android API的各种功能。本篇文章将深入探讨"android1.6 apiDemos...

    Android6.0 ApiDemos.apk

    从官方预览包里提取的Android6.0 ApiDemos.apk,方便安装在真机上查看实例的实际效果。

    Android ApiDemos apk

    《Android ApiDemos apk:深入理解Android应用开发的实践指南》 Android ApiDemos apk是Android开发者们熟悉的一个示例程序,它包含了Android SDK中的各种API功能演示,为开发者提供了丰富的学习资源。这个应用程序...

    android4.3 Apidemos

    2. 广播接收器:Android系统会发送广播消息,ApiDemos展示了如何注册和响应这些广播,以及使用BroadcastReceiver处理系统事件。 通过以上对Android 4.3 ApiDemos的深度解析,开发者不仅可以掌握新版本的API用法,还...

    Android4.1ApiDemos最新

    《深入解析Android 4.1 ApiDemos》 在Android开发领域,ApiDemos是一个非常重要的参考资料,它是由Google官方提供的示例代码集合,用于演示Android SDK中的各种API功能。对于开发者来说,尤其是对Android 4.1...

    Android ApiDemos4.4 示例解析

    最新版ApiDemos Android SDK 中带有很多例子,其中ApiDemo 详细介绍了Android 平台主要API,分成了 · App · Content · Graphics · Media · OS · Text · Views 几个大类,每个大类又分为几个小类,...

    Android 5.1 ApiDemos.apk

    Android 5.1的ApiDemos安装包

    android 3.0 ApiDemos

    《Android 3.0 ApiDemos详解》 在Android开发领域,`ApiDemos`是一个非常重要的学习资源,它是Google官方提供的一款示例程序,包含了Android SDK中的各种API功能演示。这个项目主要用于帮助开发者理解并熟悉Android...

    android_ApiDemos

    《Android ApiDemos详解——深度探索Android开发应用实例》 Android ApiDemos是Android开发者学习和理解Android API的重要资源,它包含了丰富的示例代码,涵盖了Android SDK中的各种API功能。这个程序是专为Android...

    Android ApiDemos

    **Android ApiDemos详解** `Android ApiDemos` 是Android系统提供的一款官方示例程序,它集合了Android SDK中的各种API用法,是开发者学习和理解Android开发的关键资源。这个项目旨在通过实例代码来演示Android API...

    Android官网ApiDemos源码

    Android官网ApiDemos源码 供大家学习参考之用

    android ApiDemos

    《Android API Demos详解》 Android API Demos是一款由谷歌官方提供的开源项目,它包含了大量Android SDK中的API示例代码,旨在帮助开发者更好地理解和学习如何在实际应用中使用Android的各种功能和API。该项目覆盖...

    android api19 ApiDemos

    《Android API 19 ApiDemos详解》 在Android开发领域,API Demos是一个非常重要的学习资源,它包含了Android SDK中的各种API示例代码,帮助开发者深入理解和掌握Android平台的功能特性。本文将针对API Level 19...

    Android ApiDemos不报错版本,eclipse可用

    **Android ApiDemos详解** ApiDemos是Android官方提供的一款示例应用,它包含了Android SDK中的各种API功能演示,帮助开发者了解和学习Android系统提供的各种API接口和功能。这个"Android ApiDemos不报错版本"是...

    android ApiDemos不报错版本

    《Android ApiDemos不报错版本:探索与学习》 Android ApiDemos是Android平台上的一个官方示例项目,它为开发者提供了丰富的API演示,涵盖了Android系统中的各种控件和功能,是学习和理解Android开发的宝贵资源。这...

Global site tag (gtag.js) - Google Analytics