首页 > 代码库 > Android 开发技巧总结(二)

Android 开发技巧总结(二)

1.首选项的存取数据

写一个类,里面放入存取方法,然后在外面进行调用

public class PrefsUtils {

private static final String PREFS_NAME="com.yomoto.util.OtherPrefs";

//这里放入的名字存入的地址是:data/data/项目包名/shared_prefs/PREFS_NAME

//得到首选项中的数据

public static String getValue(Context context,String key,String defaultvalue){

SharedPreferences prefs=context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

if(prefs==null) return "Unknow";

return prefs.getString(key, defaultvalue);

}

//向首选项中存入数据

public static void setValue(Context context,String key,String value){

SharedPreferences prefs=context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);

Editor editor=prefs.edit();

if(editor==null) return;

editor.putString(key, value);

editor.commit();

}}

在外面对首选项中的方法进行调用:

拿数据:

//0是拿字段为intro1的值的时,没有值情况下的默认值

PrefsUtils.getValue(BaseApplication.this, "intro1", "0");

存数据:

PrefsUtils.setValue(LogoActivity.this, "intor1", "1");

2.联网情况的判断,可以放入工具类中的方法

Public static Boolean isNetworkAvailable(Contextcontext){

try{

ConnectivityManager cm = (ConnectivityManager)context

.getSystemService(Context.CONNECTIVITY_SERVICE);

//获取网络信息

NetworkInfo info = cm.getActiveNetworkInfo();

//返回检测的网络状态

return(info!=null&&info.isConnected());

}catch(Exceptione){

e.printStackTrace();

returnfalse;

}

}

3.判断SD卡是否存在,可以放入工具类中的方法

Public static Boolean hasSdcard(){

String state = Environment.getExternalStorageState();

if(state.equals(Environment.MEDIA_MOUNTED)){

return true;

}else{

return false;

}}

 

 

4.在activity中的几个常用设置

//默认不弹出软键盘,在setContentView之前

1)getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

//设置界面全屏,在setContentView之前

2)getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

或者在manifest中进行设置,android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

5.在ScrollView中嵌入GridView和ListView

public class NavigationGridview extends GridView{

 

public NavigationGridview(Contextcontext,AttributeSetattrs){

super(context,attrs);

}

 

publicNavigationGridview(Contextcontext){

super(context);

}

 

publicNavigationGridview(Contextcontext,AttributeSetattrs,intdefStyle){

super(context,attrs,defStyle);

}

 

@Override

publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){

int expandSpec = MeasureSpec.makeMeasureSpec(

Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec,expandSpec);

}}

 

ListView与GridView一样,重写的方法一样。

6.Android生命周期的问题

1)软件启动后,第一次会执行baseapplication和启动的activity,按返回键退出的再打开的时候不执行baseapplication,只有将进程杀死,才会执行baseapplication和activity.

7.语法问题

1. 设置日期格式的语法

private SimpleDateFormat format;

format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

Date current = new Date(System.currentTimeMillis());

String str = format.format(current);

2.设置在手机中控制字的回车

在需要回车的地方加上\n

例如:在strings.xml中设置的效果为:

<string name="vip_content_small11">比普通用户享受更低的价格\n更多种类的优惠券比团\n购更优惠,更方便</string>

8.额外知识点总结

1)手机屏幕

小米1s的手机屏幕 高度:854 宽度:480

三星5.8寸手机屏幕 高度:960 宽度:540

9.问题解决和处理

1)在ScrollView中的Listview有时候添加完数据后,listview会获取焦点,导致界面显示从listview开始,此时在listView.setAdapter(adapter);后加上

listView.setFocusable(false);来解决焦点的问题。

10.手机直接跳转到网页

Uriuri=Uri.parse("http://appadmin.ibinggo.com/adm_program/modules/downloads/get_file.php?file_id=7");

Intentintent=newIntent(Intent.ACTION_VIEW,uri);

startActivity(intent);

11. message配合handler的使用

Messagemessage=mHandler.obtainMessage();//数据下载完毕后,向handler发送一个数据,进行界面ui的更新。

message.what=1;

message.sendToTarget();

 

Handler mHandler = new Handler(){

@Override

Public void handleMessage(Messagemsg){

super.handleMessage(msg);

if(msg.what==1){}

}}

12. Android基础知识点

1)Android UI更新是在主线程中进行的。

2)<application

android:allowBackup="true"

android:icon="@drawable/ic_donga"

//这里一定要写上它的名字

android:name="com.qianxunnt.xinlife.activity.BaseApplication"

android:label="@string/app_name"

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

>

3)根据条件分割字符串

String[] s = t.split("sess_id="); //拆分字段

4) Gson gson =new Gson(); //解析json到localCouponsList

//处理集合数据

mCoupons = gson.fromJson(t, new TypeToken<List<CouponsInfo>>(){}.getType());

//处理单独的类数据

updateTime = gson.fromJson(t, UpdateTimeInfo.class);

5) NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

 // 创建一个Notification

Notification notification = new Notification();

 // 设置显示在手机最上边的状态栏的图标

notification.icon = R.drawable.ic_donga;

// 当当前的notification被放到状态栏上的时候,提示内容

notification.tickerText = "您已成功升级为VIP用户!";

//添加声音提示

notification.defaults = Notification.DEFAULT_SOUND;

//让通知点击消失的按钮

notification.flags |= Notification.FLAG_AUTO_CANCEL;

Intent intent = new Intent(NewCouponsDetailActivity.this, MainActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(NewCouponsDetailActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

 // 点击状态栏的图标出现的提示信息设置

notification.setLatestEventInfo(NewCouponsDetailActivity.this, "缤购提示", "您已经成功升级为VIP用户,使用期限"+useTime+"天!", pendingIntent);

manager.notify(1,notification);

6)String sDest=URLDecoder.decode(couponsContent.getContent(), "utf-8");

//没有执行baseapplication所以无值

kuaicanWebview.getSettings().setDefaultTextEncodingName("UTF-8") ;

kuaicanWebview.loadDataWithBaseURL(null,sDest,"text/html","UTF-8",null);

7)代码中为控件设置一段简单的动画

Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);//显然这个比较简洁,只有一行代码。

animation.setFillAfter(true);// True:图片停在动画结束位置

animation.setDuration(300);

imageView.startAnimation(animation);

8)列表dialog的设置

new AlertDialog.Builder(this).setTitle("报错选择")

.setItems(

new String[] {"电话报错","地址报错","地图位置报错" }, //列表内容

new DialogInterface.OnClickListener() {//点击监听

@Override

public void onClick(

DialogInterface dialog, int which) {//点击位置

}})

 .setNegativeButton("确定", null)

 .show();

9)根据经纬度算距离

public static double distanceByLngLat(double lng1, double lat1, double lng2,double lat2) {

    double radLat1 = lat1 * Math.PI / 180;

    double radLat2 = lat2 * Math.PI / 180;

    double a = radLat1 - radLat2;

    double b = lng1 * Math.PI / 180 - lng2 * Math.PI / 180;

    double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)

                    + Math.cos(radLat1) * Math.cos(radLat2)

                    * Math.pow(Math.sin(b / 2), 2)));

    s = s * 6378137.0;

    s = Math.round(s * 10000) / 10000;

    return s;

}

 

 

 

 

 

10)对返回按钮的两种监听方式

(1) @Override

public void onBackPressed() {

// TODO Auto-generated method stub

super.onBackPressed();

}

(2) public boolean onKeyDown(int keyCode, KeyEvent event) {

            if (keyCode == KeyEvent.KEYCODE_BACK) 

            {}}

11)

 XActivitiesListView listView = (XActivitiesListView)parent;  NotificationInfo coupon =(NotificationInfo)listView.getItemAtPosition(postion);//主要方法

12)设置activity的横屏和竖屏 

android:screenOrientation=”landscape”属性即可(landscape是横向,portrait是纵向)