Android开发小知识点

本文深入探讨了Android应用开发中的关键技巧,包括隐藏活动标题、Toast消息框的使用、Activity和Fragment的区别、启动Activity的方法、横竖屏切换、ActionBar的定制、Intent调用系统应用、时间视图显示、WebView加载网页、ContentProvider查询数据、短信发送、常用快捷键使用等。通过这些实用指南,开发者能够提升应用的用户体验和功能实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、隐藏活动标题

1、代码设置:在onCreate()方法中

requestWindowFeature(Window.FEATURE_NO_TITLE);

2、 在manifest.xml中设置

android:theme="@android:style/Theme.NoTitleBar"

二、Toast中传入Context实例

Toast在Activity中,使用this返回一个Context实例

Toast在AlertDialog中使用,因此使用getApplicationContext()方法返回一个Context实例

注意:

TextView tv=new TextView(this);

创建View对象时,传入的参数是Context对象,因为Activity类是Context类的子类,因此可以使用this关键字来代表这个Context对象。

三、Activity和Fragment的一个区别

当Activity进入后天后时,会被放到back stack中。这样当用户按Back键时,Activity可以恢复。但是,Fragment在进入后台时不会被自动放到back stack中。要实现这一目的,需要在Fragment处理期间显示调用addToBackStack()方法。

如:

FragmnetManangermanager=getFragmentManager();

FragmentTransactionfragmentTransaction=fragmentMananger.beginTransaction();

fragmentTransaction.replace(android.R.id.content,myfragment);

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();

这段代码确保了当Fragment添加到Activity中,用户可以点击Back按钮移除它

四、Intent调用系统应用,使用startActivity(intent)就可以跳转页面

1、 浏览器

Intent intent=new Intent(android.content.Intent.ACTION_VIEW,Uri.

parse(“http://www.baidu.com”));

选择器(可以不要)

startAtivity(Intent.createChooser(intent,”selectBrower..”));

2、 拨打电话

Intent intent=newIntent(android.content.Intent.ACTION_DIAL,Uri.

parse(“tel:+3444444”));

如果想让应用程序直接呼叫特定号码,需要为应用程序添加android.permission.CALL_PHONE权限。

只打开拨号应用程序:

Intent intent=newIntent(android.content.Intent.ACTION_DIAL);

3、 地图

Intent intent=newIntent(android.content.Intent.ACTION_VIEW,Uri.

parse(“geo:37.0,-122.0”));

4、 显示联系人列表

Intent intent=newIntent(android.content.Intent.ACTION_VIEW,Uri.

parse(“content://contacts”));

5、 选择联系人

Intent intent=newIntent(android.content.Intent.ACTION_PICK,Uri.

parse(“content://contacts”));

android.content.Intent.ACTION_VIEW常量实际上指的是“android.intent.action.VIEW”动作,所以还可以这样写,如选择联系人:

Intent intent=new Intent(“android.intent.action.VIEW”, Uri.

parse(“content://contacts”));

还可以这样写:

Intent intent=new Intent(“android.intent.action.VIEW”);

intent.setData( Uri.parse(“content://contacts”));

五、启动Activity

1、常规方法

Intent intent=new Intent(this,OtherActivity.class);

startActivity(intent);

2、使用action启动

在manifest.xml中Activity声明的时候,设置action

<activity< p="">

android:label=”OtherActivity”

android:name=”com.example.OtherActivity”

>

//最好使用包路径做action

.

启动Activity

Intent intent=new Intent(”raleigh.OtherActivity”);

startActivity(intent);

六、GroupView视图组

1、 LinearLayout

2、 AbsoluteLayout

3、 TableLayout

4、 RelativeLayout

5、 FrameLayout

6、 ScrollView

使用绝对布局AbsoluteLayout时可以结合layout_x和layout_y使用,指定View控件的位置。

七、获取焦点问题

1、 某控件获取焦点,加下面两句就可以获取了

android:focusable=”true”

android:focusableInTouchMode=”true”

2、 使EditText自动获取焦点,但不弹出虚拟键盘

需要在manifest.xml文件中,声明Activity时设置stateHidden,如

<activity< p="">

android:name=”.MainActivity”

android:windowSoftInputMode=”stateHidden”

>

八、横竖屏切换

(一) 适应显示方向

1、锚定

使用RelativeLayout调整拉伸屏幕

2、调整大小和重新定位

使用两个布局,(layout-land)一个横向布局,(layout)一个纵向布局

(二) 配置改变是保持状态信息

1、 onPause()—当一个Activity被终止或转入后台时都会触发

2、 onSaveInstanceState()—当一个Activity将要被终止或转入后台时触发

与Pause()方法不同的是,当一个Activity从栈中卸载时(例如用户按下了Back按钮),不会触发onSaveInstanceState(),这是因为后面无需恢复其状态了。

例子,保存:

@Override

protected void onSaveInstanceState(BundleoutState) {

//注意super的顺序

outState.putString("ID","1234");

super.onSaveInstanceState(outState);

}

onRestoreInstanceState方法取出:

@Override

protected void onRestoreInstanceState(BundlesavedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

StringID=savedInstanceState.getString("ID");

}

3、 onRetainNonConfigurationInstance()—当一个Activity由于配置改变(例如横竖屏切换、键盘是否可用等),将要被销毁时触发。

当需要临时保存一些数据,例如从Web服务中下载了数据,而用户改变了屏幕的方向时,可以使用这个方法保存数据。

保存,可以返回任何对象:

@Override

public ObjectonRetainNonConfigurationInstance() {

String result="some text topreserve";

returnresult;

}

读取数据:

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

String str=(String)getLastNonConfigurationInstance();

}

(三) 检查方向的改变

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

WindowManagerwm=getWindowManager();

// getDefaultDisplay()方法返回一个表示设备屏幕的Display对象

Displayd=wm.getDefaultDisplay();

if(d.getWidth()>d.getHeight()){

//landscape mode

}else{

//portraitmode

}

}

(四) 控制Activity的方向,设置横竖屏方向

1、代码设置,在onCreate()方法中:

横向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

纵向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

3、 在manifest.xml中设置(portrait纵向,landscape横向)

<activity< p="">

android:name="com.example.test.MainActivity"

android:label="@string/app_name"

android:screenOrientation="portrait">

九、Action Bar(支持Android 3.0以上)

(一) 打开或隐藏ActionBar

1、隐藏ActionBar,可以在manifest.xml中设置,还可以在代码中设置 actionBar.hide();

<activity< p="">

android:label="@string/app_name"

android:name=".MyActionBarActivity"

android:theme="@android:style/Theme.Holo.NoActionBar"

/>

2、打开ActionBar,代码设置

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ActionBar actionBar=getActionBar();

//隐藏 actionBar.hide();

actionBar.show();//打开

}

注意,此时manifest.xml中的android:theme不能设置值,否则会报null

(二) 定制动作项和应用程序图标

1、 定制动作项

menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

说明:

a) MenuItem.SHOW_AS_ACTION_IF_ROOM如果Action Bar上有空间,将该菜单项显示为一个动作项,显示的菜单项没有文本。

b) (MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_WITH_TEXT)动作项同时显示图标和文本。

2、 ActionBar为了使应用程序图标可被点击,需要调用setDisplayHomeAsUpEnabled()方法:

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ActionBar actionBar=getActionBar();

// actionBar.hide();

actionBar.show();//显示Action Bar

//为了使应用程序图标可被点击,需要调用setDisplayHomeAsUpEnabled()方法

actionBar.setDisplayHomeAsUpEnabled(true);

}

监听:

@Override

public boolean onOptionsItemSelected(MenuItemitem) {

switch (item.getItemId()) {

case android.R.id.home:

Toast.makeText(this,"Youclicked on the Application icon", Toast.LENGTH_SHORT).show();

break;

}

return true;

}


(三)

十、Intent Flag

1、Intent.FLAG_ACTIVITY_CLEAR_TOP:确保了当用户点击Action Bar中的应用程序图标时,Backstack中的一系列活动被清除,这样,如果用户点击Back按钮,应用程序中的其他活动就不会再次显示

十一、 菜单

1、 为某菜单项设置快捷键方法:

menu.setQwertyMode(true);

menuItem.setAlphabeticShortcut()

2、 将某个View与上下文菜单绑定:view.setOnCreateContextMenuListener(this);

十二、 时间视图,显示系统时间,不可更改

1、 AnalogClock有分针和时针

<anaglogclock< p="">

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

/>

\ 

2、 DigitalClock数字显示时间

<digitalclock< p="">

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

/>

十三、 WebView

1、 避免页面免重定向,需实现WebViewClient类并重写shouldOverrideUrlLoading()方法。

class Callback extends WebViewClient{

@override

public boolean shouldOverrideUrlLoading(WebView view,Stringurl){

return(false);

}

}

webview.setWebViewClient(new Callback());

2、 创建HTML字符串,loadDataWithBaseURL()

String mimeType=”text/html”;

String encoding=”UTF-8”;

String html=”

A simple HTMLpage

lazy dog

webView.loadDataWithBaseURL(“”,html,mimeType,encoding,””);

十四、 Content Provider

1、 查询字符串

a) content://media/internal/images 返回一个一个存储在设备上的返回内部图像的列表

b) content://media/external/images 返回一个存储在设备的外部存储器(如SD卡)上的所有图像的列表

c) content://call_log/calls 返回一个在CallLog中记录所有通话的列表

d) content://brower/bookmarks 返回一个存储在浏览器中的书签列表

2、 检测当前运行应用程序的版本

android.os.Build.VERSION.SDK_INT---取值范围(3-19)

3、 预定义查询字符串常量

Contacts.CONTENT_URI

Browser.BOOKMARKS_URI

Browser.SEARCHES_URI

CallLog.CONTENT_URI

MediaStore.image.Media.INTERNAL_CONTENT_URI

MediaStore.image.Media.EXTERNAL_CONTENT_URI

Settings.CONTENT_URI

4、 其他

1) 查询联系人

UriallContacts=Uri.parse("content://contacts/people");

或者:

Uri allContacts=ContactsContract.Contacts.CONTENT_URI;

说明:对于Android2.0或更高版本,需要使用Contacts.CONTENT_URI的方式,CONTENT_URI用来查询基本的Contacts记录。

2) 检索第一个联系人

Uri allContacts=Uri.parse("content://contacts/people/1");

或者

Uri allContacts=ContactsUris.widthAppendedId

(ContactsContract.Contacts.CONTENT_URI,1);

3) 遍历联系人

private void printContacts(Cursor c){

if(c.moveToFirst()){

do{

StringcontactId=c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));

StringcontactDisplayName=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

Log.v("ContentProviders",contactId+","+contactDisplayName);

//为了访问一个联系人的号码,需要对存储于

//ContactsContract.ConmmonDataKinds.Phone.CONTENT_URI中的URI进行查询

inthasPhone=c.getInt(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

if(hasPhone==1){

Cursor phoneCursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"= "+contactId, null,null);

while(phoneCursor.moveToNext()){

Log.v("Content Providersphone=",phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));

}

phoneCursor.close();

}

}while(c.moveToNext());

}

}

5、 检索一个托管游标

managedQuery(uri, projection, selection, selectionArgs,sortOrder);

a) uri

如:Uri allContacts=ContactsContract.Contacts.CONTENT_URI;

b) 投影

如:String[]projection=new String[]{

ContactsContract.Contacts._ID,

ContactsContract.Contacts.DISPLAY_NAME,

ContactsContract.Contacts.HAS_PHONE_NUMBER

};

c) 筛选

String selection=ContactsContract.Contacts.DISPLAY_NAME+"LIKE '%Lin'";

筛选条件,前后结合使用

String selection=ContactsContract.Contacts.DISPLAY_NAME+" LIKE ?";

String[] selectionArgs=newString{“%Lin”};

d) 排序

String sortOrder =ContactsContract.Contacts.DISPLAY_NAME+"ASC

十五、 SMS

1、 发消息

SmsManager sms=SmsManager.getDefault();

sms.sendTextMessage(destinationAddress,scAddress, text, sentIntent, deliveryIntent);

说明:

a) destinationAddress—收件人的电话号码

b) scAddress—服务中心地址,null代表默认的SMSC

c) text—SMS消息的内容

d) sentIntent—发送消息后调用的挂起的Intent,可以为null

e) deliveryIntent—消息递送后调用的挂起的Intent,可以为null

注意,如果使用SmsManager类以编程的方式发送SMS消息,发送的消息不会出现在发送者的内置Messaging应用程序中

十六、 常用快捷键

1. Ctrl+Shift+O 导入该类所需要的所有包

2. Alt+/ 打开提示

3. Ctrl+Shift+Enter 上一行空行

4. Shift+Enter 下一行空行

5. Ctrl+Shift+G 查找调用某方法/对象/类的代码行

6. Ctrl+Shift+R 查找资源(需双击资源名,如查找layout)

7. Shift+Alt+R 重命名,方法名/对象名/类名/资源名

8. Ctrl+/ 注释某行

9. Shif+Alt+J 为某方法写注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值